Например необходимо написать класс со сложным поведением. как написать его более оптимальным способом?
сейчас получается так:
1) написал черновой вариант, разобрался что нужно что не нужно, что вообще лишнее
2) написал еще один такой же, в процессе тестов, понял что такой алгоритм сам по себе плохой.
3) написал уже чистовой класс.
можно ли как то упростить написание сложных классов?
Смотря, что вы подразумеваете под сложными классами. Лучше стараться писать простые вещи. Принципы проектирования, которые должны вам помочь: SOLID KISS Чем хуже тем лучше