




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、结构型设计模式适配器模式目录设计模式1装饰模式2代理模式3三个模式对比4设计模式Round One适配器模式1适配器模式设计模式二头插孔三头插头+=多么痛的领悟2适配器模式设计模式3适配器模式设计模式BSystemA4适配器模式设计模式n鸭子的接口public interface Duck public void quack(); /鸣叫public void fly(); /飞行n野鸭子类public class MallardDuck implements Duck public void quack() System.out.println(嘎嘎嘎.);public void fly()
2、 System.out.println(我在飞哦!);5适配器模式设计模式public class DuckTestDrive public static void main(String args) Duck duck = new MallardDuck(); System.out.println(鸭子说.);testDuck(duck);static void testDuck(Duck duck) duck.quack();duck.fly();鸭子说嘎嘎嘎.我在飞哦!6适配器模式设计模式n火鸡的接口public interface Turkey public void gobble()
3、; /火鸡鸣叫public void fly(); /火鸡飞n野火鸡类public class WildTurkey implements Turkey public void gobble() System.out.println(咕咕咕.);public void fly() System.out.println(我在飞,不过飞不远。);7适配器模式设计模式public class DuckTestDrive public static void main(String args) Duck duck = new MallardDuck(); System.out.println(鸭子说.
4、);testDuck(duck); Turkey turkey = new WildTurkey(); System.out.println(“火鸡说.); testDuck(turkey);static void testDuck(Duck duck) duck.quack();duck.fly();8适配器模式设计模式BAdapterSystemAtestDuckTurkeyDuck9适配器模式设计模式n火鸡适配器public class TurkeyAdapter implements Duck Turkey turkey;public TurkeyAdapter(Turkey turk
5、ey) this.turkey = turkey;public void quack() turkey.gobble();public void fly() for(int i=0; i 3; i+) turkey.fly();火鸡适配器包装了一个火鸡对象,同时实现了鸭子接口。这样就可以像使用鸭子一样使用火鸡了。10适配器模式设计模式public class DuckTestDrive public static void main(String args) Duck duck = new MallardDuck(); System.out.println(鸭子说.);testDuck(duc
6、k); Turkey turkey = new WildTurkey(); Duck turkeyAdapter = new TurkeyAdapter(turkey); System.out.println(“火鸡适配器说.); testDuck(turkeyAdapter);static void testDuck(Duck duck) duck.quack();duck.fly();鸭子说嘎嘎嘎.我在飞哦!火鸡适配器说咕咕咕.我在飞,不过飞不远。我在飞,不过飞不远。我在飞,不过飞不远。11适配器模式设计模式BAdapterSystemAtestDuckTurkeyDuckTurkeyAd
7、apter不需要修改代码不需要修改代码新代码12适配器模式设计模式GOF对适配器模式的定义是:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。简单来说,就是需要的东西就在眼前,但却不能用,而短时间又无法改造它,于是我们就想办法适配它。13适配器模式设计模式testDuckWildTurkeyDuckTurkeyAdapter适配器模式结构图14适配器模式设计模式适配器模式时序图WildTurkeyTurkeyAdapter15适配器模式设计模式适配器模式适用于以下情况:p 当想要使用一个已经存在的类,但是该类的接口不符合现有的需求
8、时;p 当需要创建一个可以被复用的类,该类能够与其他无关的类甚至无法预见的类协同工作时;p 当需要使用一些已经存在的子类,但是不可能对所有的都进行子类化以匹配它们的接口时,对象适配器可以对其父类接口进行适配。16适配器模式设计模式适配器模式的优点如下:p 将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,而无需修改原有代码。p 增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性。p 灵活性和扩展性都非常好,通过使用配置文件,可以很方便地更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合“开闭原则”。设计模
9、式Round Two装饰模式17装饰模式设计模式场景描述:某汉堡店有一个经典产品鸡腿汉堡,为了招揽客户该汉堡店决定开发新产品。经过商讨,汉堡店推出了三种新产品黑椒鸡腿堡、番茄鸡腿堡、沙拉鸡腿堡。18装饰模式设计模式新产品推出之后,获得了顾客的一致好评。有一天,汉堡店来了一个顾客,想要一个黑椒沙拉鸡腿堡,这可难坏了服务员,店里没有这个品种的汉堡。19装饰模式设计模式20装饰模式设计模式场景描述:某汉堡店有一个经典产品鸡腿汉堡,为了招揽客户该汉堡店决定开发新产品。经过商讨,汉堡店推出了三种新产品黑椒鸡腿堡、番茄鸡腿堡、沙拉鸡腿堡。新产品推出之后,获得了顾客的一致好评。有一天,汉堡店来了一个顾客,想
10、要一个黑椒番茄鸡腿堡,这可难坏了服务员,店里没有这个品种的汉堡。经过商讨,汉堡店改变了经营策略,不再对汉堡品种进行分类,事先制作好原味鸡腿汉堡,后续采用添加酱料的方式进行销售,顾客可以自主选择汉堡需要的酱料组合。21装饰模式设计模式如何给汉堡添加酱料?装饰模式来帮忙!装饰模式设计模式public class ChickenBurger extends Hamburger Overridepublic void makeHamburger() System.out.println(鸡腿汉堡准备好了);public class Condiment extends Hamburger protect
11、ed Hamburger hamburger;public void SetHamburger(Hamburger hamburger)this.hamburger = hamburger;Overridepublic void makeHamburger() if(hamburger != null) hamburger.makeHamburger();public abstract class Hamburger public abstract void makeHamburger();2223装饰模式设计模式public class BlackPepper extends Condime
12、nt private void AddBlackPepper()System.out.println(加黑胡椒);public void makeHamburger()super.makeHamburger();AddBlackPepper();public class Ketchup extends Condiment private void AddKetchup()System.out.println(加番茄酱);public void makeHamburger()super.makeHamburger();AddKetchup();public class Salad extends
13、 Condiment private void AddSalad()System.out.println(加沙拉);public void makeHamburger()super.makeHamburger();AddSalad();ChickenBurger chichenBurger = new ChickenBurger();BlackPepper blackPepper = new BlackPepper();Salad salad = new Salad();blackPepper.SetHamburger(chichenBurger);salad.SetHamburger(chi
14、chenBurger);blackPepper.makeHamburger();salad.makeHamburger();鸡腿汉堡准备好了加黑胡椒鸡腿汉堡准备好了加沙拉24装饰模式设计模式GOF对装饰模式的定义是:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰模式可以在不使用创造更多子类的情况下,将对象的功能加以扩展。装饰模式设计模式2526装饰模式设计模式ChickenBurger BlackPepper 27装饰模式设计模式装饰模式适用于以下情况:p 在不影响其他对象的情况下,以动态、透明的方式给单个对
15、象添加职责。p 需要动态地给一个对象增加功能,这些功能也可以动态地被撤销。p 当不能采用继承的方式对系统进行扩充或者采用继承不利于系统扩展和维护时。不能采用继承的情况主要有两类:第一类是系统中存在大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长;第二类是因为类定义不能继承(如final类).28装饰模式设计模式装饰模式的优点如下:p 装饰模式与继承关系的目的都是要扩展对象的功能,但是装饰模式可以提供比继承更多的灵活性。p 可以通过一种动态的方式来扩展一个对象的功能,通过配置文件可以在运行时选择不同的装饰器,从而实现不同的行为。p 通过使用不同的具体装饰类以及这些装饰类
16、的排列组合,可以创造出很多不同行为的组合。可以使用多个具体装饰类来装饰同一对象,得到功能更为强大的对象。p 具体构件类与具体装饰类可以独立变化,用户可以根据需要增加新的具体构件类和具体装饰类,在使用时再对其进行组合,原有代码无须改变,符合“开闭原则”。29装饰模式设计模式装饰模式的缺点如下:p 使用装饰模式进行系统设计时将产生很多小对象,这些对象的区别在于它们之间相互连接的方式有所不同,而不是它们的类或者属性值有所不同,同时还将产生很多具体装饰类。这些装饰类和小对象的产生将增加系统的复杂度,加大学习与理解的难度。p 这种比继承更加灵活机动的特性,也同时意味着装饰模式比继承更加易于出错,排错也很
17、困难,对于多次装饰的对象,调试时寻找错误可能需要逐级排查,较为烦琐。设计模式Round Three代理模式30代理模式设计模式场景描述:有一个红酒生产厂开业了,该红酒生产厂的每天的工作如下:接收消费者的订单统计订单生产红酒销售红酒渐渐地,红酒厂商发现自己的经营越来越困难,消费者的订单过于零散,接收和统计订单耗时又耗力,直接影响到了厂商生产红酒的精力,此外每次收到一个小的订单就要启动设备生产红酒相当耗费资源。经过商讨,红酒厂商决定招收一批代理商。让代理商去处理消费者的订单,而红酒厂商只负责生产红酒和提供红酒给代理商。31代理模式设计模式32代理模式设计模式public class RealRed
18、WineFactory implements IWineFactory Overridepublic void product() System.out.println(红酒工厂生产红酒.);public interface IWineFactory public void product();/生产酒的方法33代理模式设计模式public class RedWineProxy implements IWineFactory private final IWineFactory redWine;public RedWineProxy(IWineFactory redWine) this.red
19、Wine = redWine;public void preRequest() System.out.println(代理商处理订单.);System.out.println(代理商向厂商提供总订单.);public void afterRequest() System.out.println(代理商从厂商提货,然后以较高价格出售,赚取一定的差价.);Overridepublic void product() preRequest();this.redWduct();afterRequest();34代理模式设计模式public class MainWine public sta
20、tic void main(String args) RealRedWineFactory realRedWineFactory = new RealRedWineFactory();RedWineProxy redWineProxy = new RedWineProxy(realRedWineFactory);redWinePduct();代理商处理订单.代理商向厂商提供总订单.红酒工厂生产红酒.代理商从厂商提货,然后以较高价格出售,赚取一定的差价.35代理模式设计模式GOF对代理模式的定义是:为其他对象提供一种代理以控制对这个对象的访问。36代理模式设计模式37代理模式设计
21、模式38代理模式设计模式代理模式的要点:1、要让代理对象和被代理对象同时实现一个接口2、要让代理对象的类中持有被代理对象的引用39Java反射机制设计模式 静态语言 动态语言Java、C#编译时进行类型检查javaScript、Ruby类型检查在运行时进行40Java反射机制设计模式 什么是反射? 反射有什么用? 在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。1,在运行时判断任意一个对象所属的类;2,在运行时构造任意一个类的对象;3,在运行时判断任意一
22、个类所具有的成员变量和方法;4,在运行时调用任意一个对象的方法;5,生成动态代理41Java反射机制设计模式 接口AnnotatedElement表示目前正在此 VM 中运行的程序的一个已注释元素。GenericArrayTypeGenericArrayType 表示一种数组类型,其组件类型为参数化类型或类型变量。GenericDeclaration声明类型变量的所有实体的公共接口。InvocationHandlerInvocationHandler 是代理实例的调用处理程序 实现的接口。Member成员是一种接口,反映有关单个成员(字段或方法)或构造方法的标识信息。Parameterized
23、TypeParameterizedType 表示参数化类型,如 Collection。TypeType 是 Java 编程语言中所有类型的公共高级接口。TypeVariableTypeVariable 是各种类型变量的公共高级接口。WildcardTypeWildcardType 表示一个通配符类型表达式,如 ?、? extends Number 或 ? super Integer。 与反射有关的所有接口以及类都在java.lang.reflect包里42Java反射机制设计模式类AccessibleObjectAccessibleObject 类是 Field、Method 和 Constr
24、uctor 对象的基类。ArrayArray 类提供了动态创建和访问 Java 数组的方法。ConstructorConstructor 提供关于类的单个构造方法的信息以及对它的访问权限。FieldField 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。MethodMethod 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。ModifierModifier 类提供了 static 方法和常量,对类和成员访问修饰符进行解码。ProxyProxy 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。ReflectPermission反射操
25、作的 Permission 类。43代理模式设计模式动态代理:与静态代理类对照的是动态代理类,动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。动态代理不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java 反射机制可以生成任意类型的动态代理类。java.lang.reflect 包中的Proxy类和InvocationHandler 接口提供了生成动态代理类的能力。 44代理模式设计模式动态代理主要是一个类和一个接口 InvocationHandler接口 Proxy类45代理模式设计模式Proxy类是专门完成代理的操作类,可以通过此类为一个或多
26、个接口动态地生成实现类,此类提供了如下的操作方法: public static Object newProxyInstance(ClassLoader loader, Class interfaces, InvocationHandler h) 参数说明: ClassLoader loader:类加载器 Class interfaces:得到全部的接口 InvocationHandler h:得到InvocationHandler接口的子类实例 Proxy类:类:46代理模式设计模式JDK动态代理中包含一个类和一个接口: public interface InvocationHandler p
27、ublic Object invoke(Object proxy,Method method,Object args) 参数说明: Object proxy:指被代理的对象。 Method method:要调用的方法 Object args:方法调用时所需要的参数InvocationHandler接口:接口:47代理模式设计模式48代理模式设计模式redWinePduct()方法被调用redWinePduct( )invoke(Object proxy, Method method, Object args)redWineProxy会接着调用Invocation
28、Handler的invoke()方法wineHandler决定要如何处置这个请求,可能会转发给RealSubjectmethod.invoke(sub, args);realRedWineFactory49代理模式设计模式50代理模式设计模式Java事务处理:p Java通过JDBC与数据库进行交互,这是一个如今多数程序员都不会直接使用的技术,我们更倾向于使用Hibernate和Mybatis,但是,他们在底层都需要JDBC与数据库通信,事务处理亦是如此;p JDBC提供的事务处理API非常少,请不要被Spring中事务处理的那一堆源代码所打击得信心尽失,这些框架提供的事务处理功能归根结底主要
29、通过以Connection类的方法完成: Connection.setAutoCommit(boolean); Cmit(); Connection.rollback();51代理模式设计模式一个转账的例子:将用户银行账户(Bank Account)中的存款转帐到该用户的保险账户(Insurance Account)中,两个账户对应有不同的数据库表。 有一个BankService用于转账的业务操作 BankService需要两个DAO类协同起来工作,一个负责银行账户表的操作,另一个负责保险账户表操作 抽象出一个事务处理的类TransactionManager专门负责事务处理52代理模式设计模式
30、53代理模式设计模式public class TransactionManager private DataSource dataSource; public TransactionManager(DataSource dataSource) this.dataSource = dataSource; public final void start() throws SQLException Connection connection = getConnection(); connection.setAutoCommit(false); public final void commit() t
31、hrows SQLException Connection connection = getConnection(); mit(); public final void rollback() Connection connection = null; try connection = getConnection(); connection.rollback(); catch (SQLException e) throw new RuntimeException(Couldnt rollback on connection + connection + ., e); public final v
32、oid close() Connection connection = null; try connection = getConnection(); connection.setAutoCommit(true); connection.setReadOnly(false); connection.close(); SingleThreadConnectionHolder.removeConnection(dataSource); catch (SQLException e) throw new RuntimeException(Couldnt close connection + conne
33、ction + ., e); 54代理模式设计模式public class BankService private TransactionManager transactionManager; private ConnectionHolderBankDao connectionHolderBankDao; private ConnectionHolderInsuranceDao connectionHolderInsuranceDao; public BankService(DataSource dataSource) transactionManager = new TransactionM
34、anager(dataSource); connectionHolderBankDao = new ConnectionHolderBankDao(dataSource); connectionHolderInsuranceDao = new ConnectionHolderInsuranceDao(dataSource); public void transfer(int fromId, int toId, int amount) try transactionManager.start(); connectionHolderBankDao.withdraw(fromId, amount);
35、 connectionHolderInsuranceDao.deposit(toId, amount); transactionMmit(); catch (Exception e) transactionManager.rollback(); finally transactionManager.close(); 55代理模式设计模式public class Service2 public void B() try transactionManager.start(); transactionMmit(); catch (Exception e) transactionManager.rol
36、lback(); finally transactionManager.close(); public class Service1 public void A() try transactionManager.start(); transactionMmit(); catch (Exception e) transactionManager.rollback(); finally transactionManager.close(); 55代理模式设计模式56代理模式设计模式class TransactionInvocationHandler implements InvocationHan
37、dler private Object proxy; private TransactionManager transactionManager; TransactionInvocationHandler(Object object, TransactionManager transactionManager) xy = object; this.transactionManager = transactionManager; public Object invoke(Object o, Method method, Object objects) throws Throwab
38、le transactionManager.start(); Object result = null; try result = method.invoke(proxy, objects); transactionMmit(); catch (Exception e) transactionManager.rollback(); finally transactionManager.close(); return result; 57代理模式设计模式public class TransactionEnabledProxyManager private TransactionManager t
39、ransactionManager; public TransactionEnabledProxyManager(TransactionManager transactionManager) this.transactionManager = transactionManager; public Object proxyFor(Object object) return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), new TransactionInvo
40、cationHandler(object, transactionManager); 58代理模式设计模式public class BareBankService private ConnectionHolderBankDao connectionHolderBankDao; private ConnectionHolderInsuranceDao connectionHolderInsuranceDao; public BareBankService(DataSource dataSource) connectionHolderBankDao = new ConnectionHolderBa
41、nkDao(dataSource); connectionHolderInsuranceDao = new ConnectionHolderInsuranceDao(dataSource); public void transfer(final int fromId, final int toId, final int amount) try connectionHolderBankDao.withdraw(fromId, amount); connectionHolderInsuranceDao.deposit(toId, amount); catch (Exception e) throw
42、 new RuntimeException(); 59代理模式设计模式public class BankService private TransactionManager transactionManager; private ConnectionHolderBankDao connectionHolderBankDao; private ConnectionHolderInsuranceDao connectionHolderInsuranceDao; public BankService(DataSource dataSource) transactionManager = new Tr
43、ansactionManager(dataSource); connectionHolderBankDao = new ConnectionHolderBankDao(dataSource); connectionHolderInsuranceDao = new ConnectionHolderInsuranceDao(dataSource); public void transfer(int fromId, int toId, int amount) try transactionManager.start(); connectionHolderBankDao.withdraw(fromId
44、, amount); connectionHolderInsuranceDao.deposit(toId, amount); transactionMmit(); catch (Exception e) transactionManager.rollback(); finally transactionManager.close(); 60代理模式设计模式TransactionEnabledProxyManager transactionEnabledProxyManager = new TransactionEnabledProxyManager(new TransactionManager
45、(dataSource); BankService bankService = new BareBankService(dataSource); BankService proxyBankService = (BankService) transactionEnabledProxyMxyFor(bankService); int toNonExistId = 3333; proxyBankService.transfer(1111, toNonExistId, 200); 61代理模式设计模式Service1Service2Service3数据库操作事务处理62代理模式设计
46、模式public class Service2 public void B() try transactionManager.start(); transactionMmit(); catch (Exception e) transactionManager.rollback(); finally transactionManager.close(); public class Service1 public void A() try transactionManager.start(); transactionMmit(); catch (Exception e) transactionMa
47、nager.rollback(); finally transactionManager.close(); 63代理模式设计模式代理模式适用于以下情况:p 远程(Remote)代理:为一个位于不同的地址空间的对象提供一个本地 的代理对象,这个不同的地址空间可以是在同一台主机中,也可是在 另一台主机中,远程代理又叫做大使(Ambassador)。p 虚拟(Virtual)代理:如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建。p Copy-on-Write代理:它是虚拟代理的一种,把复制(克隆)操作延迟到只有在客户端真正需要时才执行。一般来
48、说,对象的深克隆是一个开销较大的操作,Copy-on-Write代理可以让这个操作延迟,只有对象被用到的时候才被克隆。64代理模式设计模式p 保护(Protect or Access)代理:控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限。p 缓冲(Cache)代理:为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。p 防火墙(Firewall)代理:保护目标不让恶意用户接近。p 同步化(Synchronization)代理:使几个用户能够同时使用一个对象而没有冲突。p 智能引用(Smart Reference)代理:当一个对象被引用时,提供一些额外的操作,
49、如将此对象被调用的次数记录下来等。65代理模式设计模式代理模式的优点如下:p 代理模式能够协调调用者和被调用者,在一定程度上降低了系 统的耦合度。p 远程代理使得客户端可以访问在远程机器上的对象,远程机器 可能具有更好的计算性能与处理速度,可以快速响应并处理客户端请求。p 虚拟代理通过使用一个小对象来代表一个大对象,可以减少系 统资源的消耗,对系统进行优化并提高运行速度。p 保护代理可以控制对真实对象的使用权限。66装饰模式设计模式代理模式的缺点如下:p 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。p 实现代理模式需要额外的工作,有些代理模式的
50、实现非常复杂。设计模式Round Four模式对比适配器模式毕业设计具体研究方向前期调研671适配器的特点在于兼容,从代码上的特点来说,适配类与原有的类具有相同的接口,并且持有新的目标对象。装饰模式2装饰器模式特点在于增强,他的特点是被装饰类和所有的装饰类必须实现同一个接口,而且必须持有被装饰的对象,可以无限装饰。代理模式3代理模式的特点在于隔离,隔离调用类和被调用类的关系,通过一个代理类去调用。68设计模式模式对比适配器模式与代理模式:p 适配器为它所适配的对象提供了一个不同的接口。相反,代理提供了与它的实体相同的接口。然而,用于访问保护的代理可能会拒绝执行实体会执行的操作,因此,它的接口实
51、际上可能只是实体接口的一个子集。装饰模式与代理模式:p 尽管Decorator的实现部分与代理相似,但Decorator的目的不一样。Decorator为对象添加一个或多个功能,而代理则控制对对象的访问。设计模式23种设计模式小结设计模式创建型模式创建型模式结构型模式结构型模式行为模式行为模式工厂方法模式桥接模式模板方法模式抽象工厂模式适配器模式策略模式单例模式装饰模式状态模式建造者模式组合模式观察者模式原型模式享元模式备忘录模式外观模式中介者模式代理模式命令模式访问者模式职责链模式迭代器模式解释器模式设计模式创建型模式(Creational Pattern)p 创建型模式对类的实例化过程进行
52、了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。p 创建型模式在创建什么(What),由谁创建(Who),何时创建(When)等方面都为软件设计者提供了尽可能大的灵活性。创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。设计模式设计模式GOF的描述我的理解Singleton单例模式保证一个类仅有一个实例,并提供一个该实例全局的访问点控制实体对象的数量Factory Method工厂方法模式定义一个用于创建对象的接口
53、,让子类决定实例化那个类。FactoryMethod使得一个类的实例化延迟到子类解决的是“某个对象”的创建工作,由于需求的变化,这个对象常常面临着剧烈的变化,但是这个对象拥有的接口相对稳定。也就是说:枝节常常发生变化,但是枝节与主干的接口相对稳定Abstract Factory抽象工厂模式提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定他们的具体类解决一个系列的对象变化的问题Builder建造者模式将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示建造者模式是一步一步创建一个复杂的对象Prototype原型模式使用原型实例指定创建对象的种类,然后通过
54、拷贝这些原型来创建新的对象对象复制 浅复制 深复制设计模式结构型模式(Structural Pattern)p 结构型模式描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。p 结构型模式可以分为类结构型模式和对象结构型模式: 类结构型模式关心类的组合,由多个类可以组合成一个更大的 系统,在类结构型模式中一般只存在继承关系和实现关系。 对象结构型模式关心类与对象的组合,通过关联关系使得在一 个类中定义另一个类的实例对象,然后通过该对象调用其方法。 根据“合成复用原则”,在系统中尽量使用关联关系来替代继 承关系,因此大部分结构型模式都是对象结构型模式。设计模式设计模式GoF的描述我的理解Adapter适配器模式 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的类可以一起工作 适配器的特点在于兼容,从代码上的特点来说,适配类与原有的类具有相同的接口,并且持有新的目标对象。Bridge桥接模式 将抽象部分与实现部分分离,使他们可以独立的变化 当某个类型具有两个或两个以上的纬度变化,通过关联关系而不是单纯继承关系来进行系统的扩展。Composite组合模式 将对象组合成树形结构以表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江中考物理试题及答案
- 软件评测流程的标准化与优化试题及答案
- 信息管理课程中的Msoffice应用探究试题及答案
- 盖州事业单位面试题及答案
- 航天试题口诀及答案解析
- 北京专版2024中考语文复习方案考题训练二专题七古诗文默写
- 人文地理期末考试试题及答案A卷
- 2024高考语文一轮复习专项对点练23论证分析题-明类型抓要素知流程含解析新人教版
- 多媒体设计师考试试题珍藏版
- 知识整合提升初级社工者考试的试题及答案
- 支局长工作手册
- 励志主题班会_课件
- 雅马ur44声卡中文说明书
- 《民族传统体育项目》教学大纲
- 工程训练教学示范中心的建设规范与验收标准
- (完整版)安全生产费用投入台账(模版)
- 铁路行车非正常情况应急处理操作手册(1)
- AQL抽样检验标准
- 东北大学编译原理课程设计报告
- 《谷氨酸的生产工艺》PPT课件.ppt
- 旅行社游客意见反馈表(意见单)
评论
0/150
提交评论