├── .gitignore ├── 01简单工厂模式 └── src │ ├── Main.java │ ├── Operation.java │ ├── OperationAdd.java │ ├── OperationFactory.java │ └── OperationSub.java ├── 02策略模式 └── src │ ├── ConcreteStrategyA.java │ ├── ConcreteStrategyB.java │ ├── ConcreteStrategyC.java │ ├── ConcreteStrategyD.java │ ├── Context.java │ ├── Main.java │ └── Strategy.java ├── 06装饰模式 └── src │ ├── Component.java │ ├── ConcreteComponent.java │ ├── ConcreteDecoratorA.java │ ├── ConcreteDecoratorB.java │ ├── Decorator.java │ └── Main.java ├── 07代理模式 └── src │ ├── Main.java │ ├── Proxy.java │ ├── RealSubject.java │ └── Subject.java ├── 08工厂方法模式 └── src │ ├── AddFactory.java │ ├── Factory.java │ ├── Main.java │ ├── Operation.java │ ├── OperationAdd.java │ ├── OperationSub.java │ └── SubFactory.java ├── 09原型模式 └── src │ ├── Main.java │ ├── PrototypeClient.java │ ├── Resume.java │ └── WorkExperience.java ├── 10模板方法模式 └── src │ ├── AbstractClass.java │ ├── ConcreteClassA.java │ ├── ConcreteClassB.java │ └── Main.java ├── 12外观模式 └── src │ ├── Facade.java │ ├── Main.java │ ├── SubSystemOne.java │ ├── SubSystemThree.java │ └── SubSystemTwo.java ├── 13建造者模式 └── src │ ├── Builder.java │ ├── ConcreteBuilder1.java │ ├── ConcreteBuilder2.java │ ├── Director.java │ ├── Main.java │ └── Product.java ├── 14观察者模式 └── src │ ├── v1 │ ├── Main.java │ ├── NBAObserver.java │ ├── Observer.java │ ├── Secretary.java │ └── StockObserver.java │ └── 基本代码 │ ├── Main.java │ ├── Secretary.java │ └── StockObserve.java ├── 16状态模式 └── src │ ├── Context.java │ ├── Main.java │ └── State.java └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | *.iml 3 | out/ -------------------------------------------------------------------------------- /01简单工厂模式/src/Main.java: -------------------------------------------------------------------------------- 1 | import java.io.BufferedReader; 2 | import java.io.IOException; 3 | import java.io.InputStreamReader; 4 | 5 | public class Main { 6 | public static void main(String[] args) throws IOException { 7 | while (true) { 8 | System.out.println("请输入第一位操作数字"); 9 | BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 10 | int numberA = Integer.parseInt(br.readLine()); 11 | 12 | System.out.println("请输入第二位操作数字"); 13 | int numberB = Integer.parseInt(br.readLine()); 14 | 15 | System.out.println("请输入操作符"); 16 | String operator = br.readLine(); 17 | 18 | Operation operation = OperationFactory.createOperation(operator); 19 | 20 | operation.setNumberA(numberA); 21 | operation.setNumberB(numberB); 22 | System.out.println(operation.getResult()); 23 | 24 | System.out.println("是否继续y/n"); 25 | String continueInput = br.readLine(); 26 | if(!continueInput.equals("y")){ 27 | break; 28 | } 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /01简单工厂模式/src/Operation.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 操作抽象类 3 | */ 4 | public abstract class Operation { 5 | 6 | private int numberA; 7 | private int numberB; 8 | 9 | public abstract int getResult(); 10 | 11 | public int getNumberA() { 12 | return numberA; 13 | } 14 | 15 | public void setNumberA(int numberA) { 16 | this.numberA = numberA; 17 | } 18 | 19 | public int getNumberB() { 20 | return numberB; 21 | } 22 | 23 | public void setNumberB(int numberB) { 24 | this.numberB = numberB; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /01简单工厂模式/src/OperationAdd.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 加法类的实现 3 | */ 4 | public class OperationAdd extends Operation { 5 | @Override 6 | public int getResult() { 7 | return this.getNumberA() + this.getNumberB(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /01简单工厂模式/src/OperationFactory.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 工厂类 3 | */ 4 | public class OperationFactory { 5 | public static Operation createOperation (String operator) { 6 | switch (String.valueOf(operator)) { 7 | case "+": 8 | return new OperationAdd(); 9 | case "-": 10 | return new OperationSub(); 11 | } 12 | return null; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /01简单工厂模式/src/OperationSub.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 减法的实现 3 | */ 4 | public class OperationSub extends Operation{ 5 | @Override 6 | public int getResult() { 7 | return this.getNumberA() - this.getNumberB(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /02策略模式/src/ConcreteStrategyA.java: -------------------------------------------------------------------------------- 1 | public class ConcreteStrategyA extends Strategy{ 2 | @Override 3 | public void AlgorithmInterface() { 4 | System.out.println("算法A实现"); 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /02策略模式/src/ConcreteStrategyB.java: -------------------------------------------------------------------------------- 1 | public class ConcreteStrategyB extends Strategy { 2 | @Override 3 | public void AlgorithmInterface() { 4 | System.out.println("算法B实现"); 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /02策略模式/src/ConcreteStrategyC.java: -------------------------------------------------------------------------------- 1 | public class ConcreteStrategyC extends Strategy{ 2 | 3 | @Override 4 | public void AlgorithmInterface() { 5 | System.out.println("算法C实现"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /02策略模式/src/ConcreteStrategyD.java: -------------------------------------------------------------------------------- 1 | public class ConcreteStrategyD extends Strategy { 2 | @Override 3 | public void AlgorithmInterface() { 4 | System.out.println("算法D实现"); 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /02策略模式/src/Context.java: -------------------------------------------------------------------------------- 1 | public class Context { 2 | 3 | private Strategy strategy; 4 | 5 | public Context(String type) { 6 | switch (type) { 7 | case "A": 8 | this.strategy = new ConcreteStrategyA(); 9 | break; 10 | case "B": 11 | this.strategy = new ConcreteStrategyB(); 12 | break; 13 | case "C": 14 | this.strategy = new ConcreteStrategyC(); 15 | break; 16 | case "D": 17 | this.strategy = new ConcreteStrategyD(); 18 | break; 19 | } 20 | } 21 | 22 | // 上下文接口 23 | public void ContextInterface() { 24 | strategy.AlgorithmInterface(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /02策略模式/src/Main.java: -------------------------------------------------------------------------------- 1 | public class Main { 2 | public static void main(String[] args) { 3 | Context context; 4 | 5 | context = new Context("B"); 6 | context.ContextInterface(); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /02策略模式/src/Strategy.java: -------------------------------------------------------------------------------- 1 | public abstract class Strategy { 2 | // 算法方法 3 | public abstract void AlgorithmInterface(); 4 | } 5 | -------------------------------------------------------------------------------- /06装饰模式/src/Component.java: -------------------------------------------------------------------------------- 1 | public abstract class Component { 2 | public abstract void operation(); 3 | } 4 | -------------------------------------------------------------------------------- /06装饰模式/src/ConcreteComponent.java: -------------------------------------------------------------------------------- 1 | public class ConcreteComponent extends Component{ 2 | @Override 3 | public void operation() { 4 | System.out.println("具体对象的操作"); 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /06装饰模式/src/ConcreteDecoratorA.java: -------------------------------------------------------------------------------- 1 | public class ConcreteDecoratorA extends Decorator{ 2 | 3 | private String addState; 4 | 5 | @Override 6 | public void operation() { 7 | super.operation(); 8 | addState = "new state"; 9 | System.out.println("具体装饰对象a的操作"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /06装饰模式/src/ConcreteDecoratorB.java: -------------------------------------------------------------------------------- 1 | public class ConcreteDecoratorB extends Decorator{ 2 | 3 | @Override 4 | public void operation() { 5 | super.operation(); 6 | addBehavior(); 7 | System.out.println("具体装饰对象B的操作"); 8 | } 9 | 10 | public void addBehavior() { 11 | System.out.println("add behavior"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /06装饰模式/src/Decorator.java: -------------------------------------------------------------------------------- 1 | abstract class Decorator extends Component { 2 | 3 | protected Component component; 4 | 5 | public void setComponent(Component component) { 6 | this.component = component; 7 | } 8 | 9 | @Override 10 | public void operation() { 11 | if (this.component != null) { 12 | component.operation(); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /06装饰模式/src/Main.java: -------------------------------------------------------------------------------- 1 | public class Main { 2 | public static void main(String[] args) { 3 | ConcreteComponent c = new ConcreteComponent(); 4 | 5 | ConcreteDecoratorA d1 = new ConcreteDecoratorA(); 6 | ConcreteDecoratorB d2 = new ConcreteDecoratorB(); 7 | 8 | d1.setComponent(c); 9 | d2.setComponent(d1); 10 | d2.operation(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /07代理模式/src/Main.java: -------------------------------------------------------------------------------- 1 | public class Main { 2 | public static void main(String[] args) { 3 | Proxy proxy = new Proxy(); 4 | proxy.request(); 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /07代理模式/src/Proxy.java: -------------------------------------------------------------------------------- 1 | public class Proxy extends Subject{ 2 | 3 | private RealSubject realSubject; 4 | 5 | @Override 6 | public void request() { 7 | if (realSubject == null) { 8 | realSubject = new RealSubject(); 9 | } 10 | System.out.println("before"); 11 | realSubject.request(); 12 | System.out.println("after"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /07代理模式/src/RealSubject.java: -------------------------------------------------------------------------------- 1 | public class RealSubject extends Subject{ 2 | @Override 3 | public void request() { 4 | System.out.println("真实的请求"); 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /07代理模式/src/Subject.java: -------------------------------------------------------------------------------- 1 | public abstract class Subject { 2 | public abstract void request(); 3 | } 4 | -------------------------------------------------------------------------------- /08工厂方法模式/src/AddFactory.java: -------------------------------------------------------------------------------- 1 | 2 | public class AddFactory implements Factory { 3 | @Override 4 | public Operation createOperation() { 5 | return new OperationAdd(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /08工厂方法模式/src/Factory.java: -------------------------------------------------------------------------------- 1 | public interface Factory { 2 | Operation createOperation(); 3 | } 4 | -------------------------------------------------------------------------------- /08工厂方法模式/src/Main.java: -------------------------------------------------------------------------------- 1 | 2 | public class Main { 3 | public static void main(String[] args) { 4 | Factory addFactory = new AddFactory(); 5 | Operation operation = addFactory.createOperation(); 6 | 7 | operation.setNumberA(1); 8 | operation.setNumberB(2); 9 | 10 | System.out.println(operation.getResult()); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /08工厂方法模式/src/Operation.java: -------------------------------------------------------------------------------- 1 | public abstract class Operation { 2 | 3 | private int numberA; 4 | private int numberB; 5 | 6 | public abstract int getResult(); 7 | 8 | public int getNumberA() { 9 | return numberA; 10 | } 11 | 12 | public void setNumberA(int numberA) { 13 | this.numberA = numberA; 14 | } 15 | 16 | public int getNumberB() { 17 | return numberB; 18 | } 19 | 20 | public void setNumberB(int numberB) { 21 | this.numberB = numberB; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /08工厂方法模式/src/OperationAdd.java: -------------------------------------------------------------------------------- 1 | public class OperationAdd extends Operation { 2 | @Override 3 | public int getResult() { 4 | return this.getNumberA() + this.getNumberB(); 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /08工厂方法模式/src/OperationSub.java: -------------------------------------------------------------------------------- 1 | public class OperationSub extends Operation { 2 | 3 | @Override 4 | public int getResult() { 5 | return this.getNumberA() - this.getNumberB(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /08工厂方法模式/src/SubFactory.java: -------------------------------------------------------------------------------- 1 | 2 | public class SubFactory implements Factory { 3 | @Override 4 | public Operation createOperation() { 5 | return new OperationSub(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /09原型模式/src/Main.java: -------------------------------------------------------------------------------- 1 | import java.io.IOException; 2 | 3 | public class Main { 4 | public static void main(String[] args) throws CloneNotSupportedException, IOException, ClassNotFoundException { 5 | System.out.println("浅拷贝"); 6 | PrototypeClient.shallowCopy(); 7 | 8 | System.out.println("##########################"); 9 | 10 | System.out.println("深拷贝"); 11 | PrototypeClient.deepCopy(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /09原型模式/src/PrototypeClient.java: -------------------------------------------------------------------------------- 1 | import java.io.IOException; 2 | 3 | public class PrototypeClient { 4 | public static void shallowCopy() throws CloneNotSupportedException { 5 | Resume a = new Resume(); 6 | a.setName("大鸟"); 7 | a.setGender("男"); 8 | a.setAge(20); 9 | a.setWorkExperience("2001", "baidu"); 10 | 11 | Resume b = (Resume) a.clone(); 12 | b.setWorkExperience("2001", "tencent"); 13 | 14 | Resume c = (Resume) a.clone(); 15 | c.setWorkExperience("2001", "ali"); 16 | 17 | a.display(); 18 | b.display(); 19 | c.display(); 20 | } 21 | 22 | public static void deepCopy() throws IOException, ClassNotFoundException, CloneNotSupportedException { 23 | Resume a = new Resume(); 24 | a.setName("大鸟"); 25 | a.setGender("男"); 26 | a.setAge(20); 27 | a.setWorkExperience("2001", "baidu"); 28 | 29 | Resume b = (Resume) a.deepClone(); 30 | b.setWorkExperience("2001", "tencent"); 31 | 32 | Resume c = (Resume) a.deepClone(); 33 | c.setWorkExperience("2001", "ali"); 34 | 35 | a.display(); 36 | b.display(); 37 | c.display(); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /09原型模式/src/Resume.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Resume implements Cloneable, Serializable{ 4 | 5 | private static final long serialVersionUID = -4410449301166191440L; 6 | 7 | private String name; 8 | private String gender; 9 | private int age; 10 | 11 | private WorkExperience workExperience; 12 | 13 | public Resume() { 14 | workExperience = new WorkExperience(); 15 | } 16 | 17 | public void display() { 18 | System.out.println(this.getName() + " " + this.getGender() + " " 19 | + this.getAge() + "\n工作经历: " 20 | + this.getWorkExperience().getWorkDate() + " " 21 | + this.getWorkExperience().getWorkCompany()); 22 | } 23 | 24 | /** 25 | * 浅拷贝 26 | * @return 27 | * @throws CloneNotSupportedException 28 | */ 29 | @Override 30 | protected Object clone() throws CloneNotSupportedException { 31 | return super.clone(); 32 | } 33 | 34 | /** 35 | * 深拷贝 36 | * @return 37 | * @throws IOException 38 | * @throws ClassNotFoundException 39 | */ 40 | public Object deepClone() throws IOException, ClassNotFoundException { 41 | // 将对象写入流内 42 | ByteArrayOutputStream bos = new ByteArrayOutputStream(); 43 | ObjectOutputStream oos = new ObjectOutputStream(bos); 44 | oos.writeObject(this); 45 | 46 | // 从流内读出对象 47 | ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream( 48 | bos.toByteArray())); 49 | return ois.readObject(); 50 | } 51 | 52 | public static long getSerialVersionUID() { 53 | return serialVersionUID; 54 | } 55 | 56 | public String getName() { 57 | return name; 58 | } 59 | 60 | public void setName(String name) { 61 | this.name = name; 62 | } 63 | 64 | public String getGender() { 65 | return gender; 66 | } 67 | 68 | public void setGender(String gender) { 69 | this.gender = gender; 70 | } 71 | 72 | public int getAge() { 73 | return age; 74 | } 75 | 76 | public void setAge(int age) { 77 | this.age = age; 78 | } 79 | 80 | public WorkExperience getWorkExperience() { 81 | return workExperience; 82 | } 83 | 84 | public void setWorkExperience(String workDate, String workCompany) { 85 | this.workExperience.setWorkDate(workDate); 86 | this.workExperience.setWorkCompany(workCompany); 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /09原型模式/src/WorkExperience.java: -------------------------------------------------------------------------------- 1 | import java.io.Serializable; 2 | 3 | public class WorkExperience implements Serializable{ 4 | private static final long serialVersionUID = 1L; 5 | private String workDate; 6 | private String workCompany; 7 | 8 | public static long getSerialVersionUID() { 9 | return serialVersionUID; 10 | } 11 | 12 | public String getWorkDate() { 13 | return workDate; 14 | } 15 | 16 | public void setWorkDate(String workDate) { 17 | this.workDate = workDate; 18 | } 19 | 20 | public String getWorkCompany() { 21 | return workCompany; 22 | } 23 | 24 | public void setWorkCompany(String workCompany) { 25 | this.workCompany = workCompany; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /10模板方法模式/src/AbstractClass.java: -------------------------------------------------------------------------------- 1 | public abstract class AbstractClass { 2 | 3 | public abstract void primitiveOption1 (); 4 | 5 | public abstract void primitiveOption2 (); 6 | 7 | public void templateMethod () { 8 | primitiveOption1(); 9 | primitiveOption2(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /10模板方法模式/src/ConcreteClassA.java: -------------------------------------------------------------------------------- 1 | public class ConcreteClassA extends AbstractClass { 2 | @Override 3 | public void primitiveOption1() { 4 | System.out.println("具体A类方法1实现"); 5 | } 6 | 7 | @Override 8 | public void primitiveOption2() { 9 | System.out.println("具体A类方法2实现"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /10模板方法模式/src/ConcreteClassB.java: -------------------------------------------------------------------------------- 1 | public class ConcreteClassB extends AbstractClass{ 2 | @Override 3 | public void primitiveOption1() { 4 | System.out.println("具体B类方法1实现"); 5 | } 6 | 7 | @Override 8 | public void primitiveOption2() { 9 | System.out.println("具体B类方法2实现"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /10模板方法模式/src/Main.java: -------------------------------------------------------------------------------- 1 | public class Main { 2 | public static void main(String[] args) { 3 | AbstractClass c = new ConcreteClassA(); 4 | c.templateMethod(); 5 | 6 | c = new ConcreteClassB(); 7 | c.templateMethod(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /12外观模式/src/Facade.java: -------------------------------------------------------------------------------- 1 | public class Facade { 2 | private SubSystemOne one; 3 | private SubSystemTwo two; 4 | private SubSystemThree three; 5 | 6 | public Facade() { 7 | one = new SubSystemOne(); 8 | two = new SubSystemTwo(); 9 | three = new SubSystemThree(); 10 | } 11 | 12 | public void methodA() { 13 | System.out.println("方法A"); 14 | one.methodOne(); 15 | three.methodThree(); 16 | } 17 | 18 | public void methodB() { 19 | System.out.println("方法B"); 20 | two.methodTwo(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /12外观模式/src/Main.java: -------------------------------------------------------------------------------- 1 | public class Main { 2 | public static void main(String[] args) { 3 | Facade facade = new Facade(); 4 | facade.methodA(); 5 | facade.methodB(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /12外观模式/src/SubSystemOne.java: -------------------------------------------------------------------------------- 1 | public class SubSystemOne { 2 | public void methodOne () { 3 | System.out.println("子系统1方法1"); 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /12外观模式/src/SubSystemThree.java: -------------------------------------------------------------------------------- 1 | public class SubSystemThree { 2 | public void methodThree() { 3 | System.out.println("子系统3方法3"); 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /12外观模式/src/SubSystemTwo.java: -------------------------------------------------------------------------------- 1 | public class SubSystemTwo { 2 | public void methodTwo() { 3 | System.out.println("子系统2方法2"); 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /13建造者模式/src/Builder.java: -------------------------------------------------------------------------------- 1 | public abstract class Builder { 2 | public abstract void buildPartA(); 3 | public abstract void buildPartB(); 4 | public abstract Product getProduct(); 5 | } 6 | -------------------------------------------------------------------------------- /13建造者模式/src/ConcreteBuilder1.java: -------------------------------------------------------------------------------- 1 | public class ConcreteBuilder1 extends Builder { 2 | 3 | private Product product = new Product(); 4 | 5 | @Override 6 | public void buildPartA() { 7 | product.add("partA"); 8 | } 9 | 10 | @Override 11 | public void buildPartB() { 12 | product.add("partB"); 13 | } 14 | 15 | @Override 16 | public Product getProduct() { 17 | return product; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /13建造者模式/src/ConcreteBuilder2.java: -------------------------------------------------------------------------------- 1 | public class ConcreteBuilder2 extends Builder { 2 | 3 | private Product product = new Product(); 4 | 5 | @Override 6 | public void buildPartA() { 7 | product.add("partX"); 8 | } 9 | 10 | @Override 11 | public void buildPartB() { 12 | product.add("partY"); 13 | } 14 | 15 | @Override 16 | public Product getProduct() { 17 | return product; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /13建造者模式/src/Director.java: -------------------------------------------------------------------------------- 1 | public class Director { 2 | public void constructor(Builder builder) { 3 | builder.buildPartA(); 4 | builder.buildPartB(); 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /13建造者模式/src/Main.java: -------------------------------------------------------------------------------- 1 | public class Main { 2 | public static void main(String[] args) { 3 | Director director = new Director(); 4 | Builder builder1 = new ConcreteBuilder1(); 5 | Builder builder2 = new ConcreteBuilder2(); 6 | 7 | director.constructor(builder1); 8 | Product product1 = builder1.getProduct(); 9 | product1.show(); 10 | 11 | director.constructor(builder2); 12 | Product product2 = builder2.getProduct(); 13 | product2.show(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /13建造者模式/src/Product.java: -------------------------------------------------------------------------------- 1 | import java.util.ArrayList; 2 | import java.util.List; 3 | 4 | public class Product { 5 | List parts = new ArrayList(); 6 | 7 | public void add(String part) { 8 | parts.add(part); 9 | } 10 | 11 | public void show() { 12 | System.out.println("---产品 创建---"); 13 | 14 | for (String part : parts) { 15 | System.out.println(part); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /14观察者模式/src/v1/Main.java: -------------------------------------------------------------------------------- 1 | package v1; 2 | 3 | class Main { 4 | 5 | public static void main(String[] args) { 6 | Secretary tongzizhe = new Secretary(); 7 | 8 | Observer tongshi1 = new StockObserver("weiguancah", tongzizhe); 9 | Observer tongshi2 = new NBAObserver("yiguancha", tongzizhe); 10 | 11 | tongzizhe.attach(tongshi1); 12 | tongzizhe.attach(tongshi2); 13 | 14 | tongzizhe.setSecretaryAction("老板回来了"); 15 | tongzizhe.Notify(); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /14观察者模式/src/v1/NBAObserver.java: -------------------------------------------------------------------------------- 1 | package v1; 2 | 3 | class NBAObserver extends Observer{ 4 | 5 | public NBAObserver(String name, Secretary sub) { 6 | super(name, sub); 7 | } 8 | 9 | @Override 10 | public void update() { 11 | System.out.println(sub.getSecretaryAction() + "," + this.name + ", 关闭NBA,继续工作"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /14观察者模式/src/v1/Observer.java: -------------------------------------------------------------------------------- 1 | package v1; 2 | 3 | abstract class Observer { 4 | 5 | protected String name; 6 | protected Secretary sub; 7 | 8 | public Observer(String name, Secretary sub) { 9 | this.name = name; 10 | this.sub = sub; 11 | } 12 | 13 | public abstract void update(); 14 | } 15 | -------------------------------------------------------------------------------- /14观察者模式/src/v1/Secretary.java: -------------------------------------------------------------------------------- 1 | package v1; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | class Secretary { 7 | 8 | private List observes = new ArrayList(); 9 | private String action; 10 | 11 | // 增加 12 | public void attach(Observer observer) { 13 | observes.add(observer); 14 | } 15 | 16 | // 减少 17 | public void detach(Observer observer) { 18 | observes.remove(observer); 19 | } 20 | 21 | // 通知 22 | public void Notify() { 23 | for (Observer o : observes) { 24 | o.update(); 25 | } 26 | } 27 | 28 | public String getSecretaryAction() { 29 | return action; 30 | } 31 | 32 | public void setSecretaryAction(String secretaryAction) { 33 | this.action = secretaryAction; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /14观察者模式/src/v1/StockObserver.java: -------------------------------------------------------------------------------- 1 | package v1; 2 | 3 | class StockObserver extends Observer { 4 | 5 | 6 | public StockObserver(String name, Secretary sub) { 7 | super(name, sub); 8 | } 9 | 10 | @Override 11 | public void update() { 12 | System.out.println(this.sub.getSecretaryAction() + "," + this.name + ", 关闭股票行情,继续工作"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /14观察者模式/src/基本代码/Main.java: -------------------------------------------------------------------------------- 1 | package 基本代码; 2 | class Main { 3 | 4 | public static void main(String[] args) { 5 | Secretary tongzizhe = new Secretary(); 6 | 7 | StockObserve tongshi1 = new StockObserve("weiguancah", tongzizhe); 8 | StockObserve tongshi2 = new StockObserve("yiguancha", tongzizhe); 9 | 10 | tongzizhe.attach(tongshi1); 11 | tongzizhe.attach(tongshi2); 12 | 13 | tongzizhe.setSecretaryAction("老板回来了"); 14 | tongzizhe.Notify(); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /14观察者模式/src/基本代码/Secretary.java: -------------------------------------------------------------------------------- 1 | package 基本代码; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | class Secretary { 7 | 8 | private List observes = new ArrayList(); 9 | private String action; 10 | 11 | public void attach(StockObserve observe) { 12 | observes.add(observe); 13 | } 14 | 15 | public void Notify() { 16 | for (StockObserve observe : observes) { 17 | observe.update(); 18 | } 19 | } 20 | 21 | public String getSecretaryAction() { 22 | return action; 23 | } 24 | 25 | public void setSecretaryAction(String secretaryAction) { 26 | this.action = secretaryAction; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /14观察者模式/src/基本代码/StockObserve.java: -------------------------------------------------------------------------------- 1 | package 基本代码; 2 | 3 | class StockObserve { 4 | private String name; 5 | private Secretary sub; 6 | 7 | public StockObserve(String name, Secretary sub) { 8 | this.name = name; 9 | this.sub = sub; 10 | } 11 | 12 | public void update() { 13 | System.out.println(sub.getSecretaryAction() + "," + this.name + ", 关闭股票行情,继续工作"); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /16状态模式/src/Context.java: -------------------------------------------------------------------------------- 1 | public class Context { 2 | 3 | private State state; 4 | 5 | public Context(State state) { 6 | this.state = state; 7 | } 8 | 9 | public State getState() { 10 | return state; 11 | } 12 | 13 | public void setState(State state) { 14 | this.state = state; 15 | } 16 | 17 | public void request() { 18 | this.state.handle(this); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /16状态模式/src/Main.java: -------------------------------------------------------------------------------- 1 | public class Main { 2 | public static void main(String[] args) { 3 | Context context = new Context(new ConcreteStateA()); 4 | 5 | context.request(); 6 | context.request(); 7 | context.request(); 8 | context.request(); 9 | context.request(); 10 | context.request(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /16状态模式/src/State.java: -------------------------------------------------------------------------------- 1 | public abstract class State { 2 | public abstract void handle(Context context); 3 | } 4 | 5 | class ConcreteStateA extends State { 6 | 7 | @Override 8 | public void handle(Context context) { 9 | System.out.println("现在是状态A"); 10 | context.setState(new ConcreteStateB()); 11 | } 12 | } 13 | 14 | class ConcreteStateB extends State { 15 | 16 | @Override 17 | public void handle(Context context) { 18 | System.out.println("现在是状态B"); 19 | context.setState(new ConcreteStateC()); 20 | } 21 | } 22 | 23 | class ConcreteStateC extends State { 24 | 25 | @Override 26 | public void handle(Context context) { 27 | System.out.println("现在是状态C"); 28 | context.setState(new ConcreteStateA()); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # design-pattern 2 | 《大话设计模式》java版实现 3 | --------------------------------------------------------------------------------