【设计模式】要点2
组合
21上
1)protected String name;
2)public abstract boolean addMenuElement(MenuComponent element)
3)public abstract List<MenuComponent>getElement()
4)private list<MenuComponent>elementList
5)mainMenu.addMenuElement(subMenu)
总结:
1)#protected受保护的,经常出现在主类第一行
2)List类无前缀,不出现void,abstract
3)List<>后接具体对象(小写例如elementList)
装饰器
12上
1)abstract class Beverage
2)public String getDescription(){
return description;}
3)public abstract int cost():
4)Beverage beverage
5)beverage=new Mocha(beverage)
6)beverage=new Whip(beverage)
总结:
1)返回值为字符串,优先考虑String方法,对应上下午找具体
2)主类第一行经常出现主类 具体对象,例如 Beverage beverage
3)装饰器模式存在 具体对象=new 子类(具体对象)
16下
1)ticket.printInvoice() //非空则打印
2)super.printInvoice() //打印父类
3)super.printInvoice()
4)ticket=new HeadDecorator(new FootDecorator(t)) //套用
5)ticket=new HeadDecorator(new FootDecorator(null))
总结:
1)super()调用父类方法
享元
21下
1)public abstract void draw()
2)private static final ArrayList<Piece>m_arrayPiece=new ArrayList
3)Piece piece=null
4)piece.draw()
5)piece.draw()
总结:
1)子类多态,调用父类
2)具体对象.方法,例如piece.draw()

行为型:
命令
14下
1)interface Command
2)public void execute(){
light.on();}
3)light.off()
4)onCommands[slot]
5)offCommands[slot]
6)onCommands[slot].execute()
7)offCommands[slot].execute()
总结:
1)一个类下面的第一行该类名 对象,为定义对象
例如:Light light
2)Command[] onCommands = new Command[7]
可推onCommands[int]为具体对象,后面可以有.方法
观察者
14上
1)class EnvironmentData implements Subject
2)observer.update(temperature,humidity,cleanness)
3)public void measurementsChanged(){
notifyObservers();}
4)measurementsChanged()
5)class CurrentConditionDisplay implements Observer
6)envData.registerObserver(this)
总结:
1)调用当前对象不具体时,写对象.方法(this)
2)根据功能为生成、新建,则用注册、add、attach
19下
1)public void update()
2)private List<Observer>myObs
3)for(Observer obs:this myObs){
obs.update();}
4)public DocExplorer(String name,Subject subject)
5)sub.Attach(this)
状态
11下
1)State soldOutState,noQuarterState,hasQuarterState,soldState,state
2)tissueMachine.setState(tissueMachine.getHasQuarterState())
3)~(tissueMachine.getNoQuarterState()) //tissue纸巾
4)~(tissueMachine.getNoQUarterState())
5)~(tissueMachine.getSoldOutState())
总结:
1)状态类名State
2)具体哪种状态根据上下文
策略
10下
1)protected FlyBehavior flybehavior
2)protected TakeOffBehavior takeoffbehavior
3)public void fly(){
flybehavior.fly();}
4)public void takeoff{
takeoffbehavior.takeoff():}
5)class Helicoper extends AirCraft
6)flyBehavior = new SubSonicFly()
7)takeOffBehavior = new VerticalTakeOff()
总结:
1)调用子类名加()
15下
1)public double accept Cash(double money)
2)cs = new CashNormal()
3)cs = new CashDiscount(0.8)
4)cs = new CashReturn(300,100)
5)return cs.acceptCash(money)
总结:
1)对象 = new 子类名()
2)get为获取 return 对象.方法 返回内容
19下
1)public void step()
2)protected BrakeBehavior wheel //brake刹车
3)public void brake(){
wheel.stop();}
4)wheel = behavior
5)car1.brake()
访问者
15上
1)public void visit(Book p_book)
2)public void visit(Article p_article)
3)public void accept(LibraryVisitor visitor)
4)visitor.visit(this)
5)visitor.visit(this)