Public Abstract classDuck {Flybehavior flybehavior; Quackbehavior Quackbehavior; PublicDuck () {} Public Abstract voiddisplay (); Public voidPerformfly () {flybehavior.fly ();} Public voidPerformquack () {quackbehavior.quack ();} Public voidswim () {System.out.println ("All Ducksfloat, even decoys!");}
Public void = fb;} Public void = QB;}
}
Public InterfaceFlybehavior { Public voidfly ();} Public classFlywithwingsImplementsFlybehavior { Public voidFly () {System.out.println ("I ' m flying!!");}} Public classFlynowayImplementsFlybehavior { Public voidFly () {System.out.println ("I can ' t Fly");}}
Public class Implements Flybehavior {publicvoid Fly () {System.out.println ("I ' m flying with a rocket!< c12> ");}}
Public InterfaceQuackbehavior { Public voidquack ();} Public classQuackImplementsQuackbehavior { Public voidQuack () {System.out.println ("quack");}} Public classMutequackImplementsQuackbehavior { Public voidQuack () {System.out.println ("<< Silence >>");}} Public classSqueakImplementsQuackbehavior { Public voidQuack () {System.out.println ("Squeak");}}
Public class extends Duck {public newnew Quack ();} Public void display () {System.out.println ("I ' m A model Duck");}}
Public class miniducksimulator {publicstaticvoidnew Mallardduck (); Mallard.performquack (); Mallard.performfly ();
New Modelduck (); Model.performfly (); Model.setflybehavior (new flyrocketpowered ()); Model.performfly ();
}}
Policy mode:
The algorithm family is defined, packaged separately, so that they can be replaced by each other, and this pattern allows the algorithm to change independently of the client using the algorithm.
[strategy mode of]head first design mode] (Duck design optimization process)