常用GoF设计模式

上传人:枫** 文档编号:562141262 上传时间:2022-12-26 格式:DOCX 页数:15 大小:162.21KB
返回 下载 相关 举报
常用GoF设计模式_第1页
第1页 / 共15页
常用GoF设计模式_第2页
第2页 / 共15页
常用GoF设计模式_第3页
第3页 / 共15页
常用GoF设计模式_第4页
第4页 / 共15页
常用GoF设计模式_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《常用GoF设计模式》由会员分享,可在线阅读,更多相关《常用GoF设计模式(15页珍藏版)》请在金锄头文库上搜索。

1、常用GoF设计模式-11. 基本概念1.1 GoF设计模式展示的设计原则GoF设计模式展示了如何处理各种变化,使代码获得最大的可重用性。主要体现一下3种设 计策略。针对接口编程,而不是针对具体的实现类编程; 优先使用对象组合,而不是类的继承技术; 将系统中的“可变部分”和“不可变部分”分离,封装变化点。1.2 GoF设计模式分为几大泛型1.2.1 创建型模式创建型模式涉及对象实例化时使用的各种模式,有以下几种(1)工厂方法(Factory Method)( 2)抽象工厂( Abstract Factory)( 3 )原型( Prototyoe)( 4)生成器( Builder)( 5)单例(

2、Singleton)1.2.2 结构型模式结构型模型主要描述系统中的类和对象应该怎样结合以构成更大的需结构,有以下几种( 1 )门面( Facade)( 2)代理( Proxy)( 3 )适配器( Adapter)( 4)组合( Composite)( 5)装饰( Decorator)( 6)桥( Bridge)( 7)享元( Flyweight)1.2.3 行为型模式行为型模式主要用来封装变化,有以下几种 ( 1 )模版( Template)( 2)备忘录( Memento)( 3 )观察者( Observer)( 4)解释器( Interpreter)( 5)职责链( Chain of R

3、esponsibility)( 6)命令( Command)( 7)迭代器( Iterator)( 8)中介( Mediator)9)访问者(Visitor)( 10 )状态( State)(11)策略(Strategy)2. 几个常用模式2.1 单例模式Singleto n範instance : Singleton靜 Singleton。getl nstan ce()Singleton类定义了一个getlnstance()操作,允许客户端访问它的唯一实例。getlnstance()是一 个静态方法,主要负责创建自己的唯一实例。代码如下:public class Singletonprivat

4、e static Singleton instance;private Singleton()/勾造方法为“私有,阻止了外界用new创建本类的实例的可能public static synchronized Singleton getInstance() /创建单例if( instance = null)instance = new Singleton();return instance;【例 1】 一般对于门面类,需要用单例模式创建它的实例,即在系统中门面类实例只能有 一个。对于生成订单的如下类图:Goodsl nfoCRU Din terface为门面接口和门面类命名后的类图为:corder

5、ManageInterfaceUserlnfoCRUDImpleorderManageBeanUserInfoCRUD InterfaceDAOServiceInterfaceDAOServicelmpleGoodsInfoCRUDInterfaceUseInfoPo关于门面类“ DAOServicelmple 的代码如下:public class DAOServiceImple implements DAOServiceInterfacepublic UserInfoDAOInterface oneUserInfoDAOImple = null; public GoodsInfoDAOInt

6、erface oneGoodsInfoDAOImple = null; private static DAOServiceInterface oneDAOServiceInstance = null;private DAOServiceImple()/构造方法public static synchronized DAOServiceInterface getInstance() /单例方法 if(oneDAOServiceInstance = null) oneDAOServiceInstance = new DAOServiceImple();return oneDAOServiceInst

7、ance;public OrderInfoPO produceOneOrderInfo(String registerUserID, StringgoodsID) /一揽子包干门面方法 oneUserInfoDAOImple = new UserInfoDAOImple(); oneGoodsInfoDAOImple = new GoodsInfoDAOImple();UserInfoPO oneUserInfoPO = oneUserInfoDAOImple.selectOneUserInfo(registerUserID);GoodsInfoPO oneGoodsInfoPO = oneG

8、oodsInfoDAOImple.selectOneGoodsInfo(goodsID);OrderInfoPO oneOrderInfoPO = new OrderInfoPO(); oneOrderInfoPO.setGoodsName(oneGoodsInfoPO.getGoodsName(); oneOrderInfoPO.setGoodsPrice(oneGoodsInfoPO.getGoodsPrice(); oneOrderInfoPO.setId(1);oneOrderInfoPO.setUserName(oneUserInfoPO.getUserName(); return

9、oneOrderInfoPO;客户端类“ orderManageBean 调用门面,产生订单,代码如下:public class orderManageBeanpublic OrderInfoPO createOrder()String registerUserID = 1;String goodsID = 1;/以下为用单例模式创建门面类实例:DAOServiceInterface oneDAOServiceBean = DAOServiceImple.getInstance (); /以下为产生一个订单:OrderInfoPO oneOrderInfoPO = oneDAOServiceB

10、ean.produceOneOrderInfo(registerUserID, goodsID);return oneOrderInfoPO;2.2 工厂方法2.2.1 如果有这样的上下调用关系代码如下:服务端: public class ABC public void method() 客户端: public class XYZ private ABC abc;public void work()abc = new ABC();abc.method();/调/ 用服务类的业务方法客户端和服务端是紧密耦合的2.2.2 用接口隔离客户端和服务端XYZABCInterface代码如下:服务端:pu

11、blic interface ABCInterface/接口public void method();public class ABC implements ABCInterface/实现类public void method()客户端:public class XYZprivate ABCInterface abc;/这里依赖接口public void work()abc = new ABC();/但是在创建接口实例时,任然依赖实现类abc.method();/调用服务类的业务方法客户端和服务端任然是紧密耦合的,要用“工厂类“的“工厂方法”来解决。2.2.3 用工厂方法创建对象实例,客户端依

12、赖工厂方法,不再直接依赖实现类引入工厂类后的类图:代码如下:服务端:public interface ABCInterface/接口public void method();/实现类public class ABC implements ABCInterfacepublic void method()public class Factory/工厂类public ABC getABC()/工厂方法ABC abc = new ABC();return abc;工厂类的简写形式: public class Factory public ABC getABC() return new ABC();客户

13、端:public class XYZ private ABCInterface abc;/依赖接口private Factory factory;public void work()factory = new Factory();abc = factory.getABC();/依赖工厂类,用工厂类创建接口的实例abc.method();调/用服务类的业务方法2.2.4 简单工厂考察上述工厂类:public class Factorypublic ABC getABC()return new ABC();Factory负责创建ABC的实例,ABC类就相当于产品,Factory是工厂,生产产品,这

14、是 个专门生产 ABC 实例的工厂。如下类图中把 ABC 和她的接口名改写成 Product 和 ProductInterface:工厂类的代码也改为如下:public class Factorypublic Product getProduct () return new Product();这是一个专门生产 Product 的工厂。思考问题 1:如果产品变为多个,怎么办? 即:有多种产品都实现了 ProductInterface 接口 如何处理?类图变为如下:ClothesTrousers沁 Cap所有产品和产品接口组成一个“产品群”。代码如下:服务端产品群:(1) 产品接口(如果在接口这个抽象来中需要包含属性数据,贝U将接口改为抽象类Abstract)public interface ProductInterfacepublic void method();(2) 衣服产品public class Clothes implements ProductInte

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号