工厂方法和观察者模式的一个真实案例

  1 import java.util.ArrayList;
  2
  3 class Manager
  4 {
  5     private String name; //经理的名字
  6     public Manager(String string) {
  7         name=string;
  8     }
  9     public void update(String id)
 10     {
 11         System.out.println("哈哈"+id+"房子已经被买了,好开心");
 12     }
 13
 14
 15 }
 16 //抽象房子
 17 abstract class House
 18 {
 19     private String id;
 20     private int price;
 21     private int  status=0;// status=0没有被卖掉
 22     private ArrayList<Manager> m=new ArrayList<Manager>();
 23     public void setStatus()
 24     {
 25         status=1;   //卖房子了
 26         for(Manager ma:m)
 27         {
 28         ma.update(id);
 29         }
 30     }
 31     public House(String id,int price)
 32     {
 33         this.id=id;
 34         this.price=price;
 35     }
 36     public  void addObserver(Manager ma)
 37     {
 38         m.add(ma);
 39     }
 40
 41
 42 }
 43 //具体房子
 44 class BigHouse extends House
 45 {
 46     public BigHouse(String id, int price) {
 47         super(id, price);
 48         // TODO Auto-generated constructor stub
 49     }
 50
 51     public void method()
 52     {
 53         System.out.println("BigHouse");
 54
 55     }
 56 }
 57 //具体房子
 58 class smallHouse extends House
 59 {
 60
 61     public smallHouse(String id, int price) {
 62         super(id, price);
 63         // TODO Auto-generated constructor stub
 64     }
 65
 66     public void met()
 67     {
 68         System.out.println("smallHouse");
 69     }
 70 }
 71 //工厂接口
 72 interface factory
 73 {
 74     public House getInstance(String id,int price);
 75
 76 }
 77 //大房子工厂
 78 class BigFactory implements factory
 79 {
 80
 81     @Override
 82     public House getInstance(String id, int price) {
 83         // TODO Auto-generated method stub
 84         return new BigHouse(id,price);
 85     }
 86
 87
 88 }
 89 class smallFactory implements factory
 90 {
 91
 92     @Override
 93     public House getInstance(String id, int price) {
 94         // TODO Auto-generated method stub
 95         return new smallHouse(id,price);
 96     }
 97
 98
 99
100 }
101
102
103 public class 设计模式1 {
104
105     /**
106      * @param args
107      */
108     public static void main(String[] args) {
109         // TODO Auto-generated method stub
110     //创建一大房子对象
111     House h1=new BigFactory().getInstance("0001", 10000000);
112     //一个小房子对象
113     ((BigHouse) h1).method();
114     House h2=new smallFactory().getInstance("333", 100);
115     Manager ma=new Manager("zhangsan");
116     h2.addObserver(ma);
117     h2.setStatus();
118
119
120
121
122
123     //卖掉
124
125
126
127
128     }
129
130 }

http://blog.csdn.net/lovelion/article/details/7430515

工厂方法和观察者模式的一个真实案例

时间: 2024-09-30 07:01:55

工厂方法和观察者模式的一个真实案例的相关文章

工厂方法模式(java 设计模式)

1.工厂方法模式的定义 工厂方法模式使用的频率非常高, 在我们日常的开发中总能见到它的身影. 其定义为:Define an interface for creating an object,but let subclasses decide which class toinstantiate.Factory Method lets a class defer instantiation to subclasses.( 定义一个用于创建对象的接口, 让子类决定实例化哪一个类. 工厂方法使一个类的实

案例分析:设计模式与代码的结构特性——工厂方法模式

什么是工厂方法模式 工厂方法模式(FACTORY METHOD)是一种常用的类创建型设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦.复用和方便后期维护拓展的目的.它的核心结构有四个角色,分别是抽象工厂:具体工厂:抽象产品:具体产品.工厂方法(Factory Method)模式定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一

Java设计模式—工厂方法模式&amp;抽象工厂模式

工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式.       工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在工厂方法模式中,抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义:Creator为抽象创建 类,也就是抽象工厂,具体如何创建产品类是由具体的实现工厂ConcreteCreator完成的. 工厂方法模式的扩展方式有很多种,下边是工厂方法模式一个比较实用的源代码: 抽象产品类: pub

Objective-C对象初始化 、 实例方法和参数 、 类方法 、 工厂方法 、 单例模式

1 重构Point2类 1.1 问题 本案例使用初始化方法重构Point2类,类中有横坐标x.纵坐标y两个属性,并且有一个能显示位置show方法.在主程序中创建两个Point2类的对象,设置其横纵坐标,并将它们显示出来. 1.2 步骤 实现此案例需要按照如下步骤进行. 步骤一:定义类Point2 由于是对Point2类的重构,所以在Day02工程中新添加Point2.h文件用于定义新的类Point2. 代码如下所示: @interface Point2 : NSObject { } @end 步

深入浅出设计模式 ------ Factory Method(工厂方法)

1. 定义: 一个用于创建对象的接口, 让子类决定实例化哪个类. 工厂方法使一个类的实例化延迟到子类. 2. 结构 3. 参与者(如上图) Product ---- 定义工厂方法所创建的对象接口 ConcreteProduct ---- 实现Product接口 Creator ---- 声明工厂方法, 该方法返回一个Product类型的对象 ConcreteCreator ---- 重新定义工厂方法返回一个ConcreteProduct实例 4. 实现 (1) 特例: 简单工厂(Simple F

深入浅出设计模式——工厂方法模式(Factory Method)

介绍在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计模式的创建型设计模式.它解决的仍然是软件设计中与创建对象有关的问题.它可以更好的处理客户的需求变化. 引入我们继续来说"new"的问题,我们在简单工厂模式中,将实例化对象的工作推迟到了专门负责创建对象的工厂类中,这样,在我们事先预知的情况下,可以根据我们的需要动态创建产品类.但是,我们的预知是有限的,客户的变化可能是无限的.所以,就出现了问题,一旦客户的变化超越了我们的预知,我们就必须修改我们的

工厂模式:简单工厂模式、工厂方法模式和抽象工厂模式

我们一般制造对象时,采用操作符new来进行创建.但是慢慢我们了解到实例化这个活动不应该总是公开地进行,同时初始化还经常造成"耦合"的问题. 如果我们不希望出现上述问题,那么我们就有必要认识一下"工厂模式",它将有助于我们从复杂的依赖中解脱出来. 1)为什么说"new"不好? 当看到"new",就会想到"具体". 我们不应该总是针对实现编程,但是当我们每次使用new时,正是在针对实现编程而不是接口,这很不符合

工厂方法模式

开放-封闭原则: 在设计模式中,对于不能修改,但可以扩展的思想也是一种重要的设计原则.比如国家对于香港的一国两制.大陆的社会主义是不可以更改的,但由于香港长期处于资本主义下,强制执行社会主义难免有些牵强,所以邓小平同志就用了开放-封闭原则,完美的解决了这一问题.在前期进行软件设计的时候,应该做好后期新增需求的准备.尽量做到新增需求时,不需要更改已有代码,而是新增代码,进行需求的扩展. 工厂方法模式: 问题抛出:在上一篇文章中,通过一个简单的两位数计算介绍了简单工厂模式.在这基础上,试想如果我们需

设计模式之工厂模式-工厂方法(02)

接着上一篇的工厂模式,工厂方法.由于简单工厂的扩展性不好,下面工厂方法,在这上面有了优化! (二)工厂方法(多态工厂模式) 工厂方法描述:定义一个创建产品对象的工厂接口(总厂是接口,里面只规定了获得具体产品实例的方法),实际创建工作推迟到实现总厂接口的子类当中.这样的好处是,可以在不修改具体工厂角色的情况下引进新的产品(即是不像简单工厂那样,增加一个具体产品,比如:增加了个浙大学生,要把在工厂中的方法中增加逻辑判断,),利于维护了: 工厂方法的角色及其职责:(1)抽象工厂角色[creator]: