收藏 分享(赏)

JAVA常用设计模式.ppt

上传人:hyngb9260 文档编号:4258287 上传时间:2018-12-19 格式:PPT 页数:74 大小:382.50KB
下载 相关 举报
JAVA常用设计模式.ppt_第1页
第1页 / 共74页
JAVA常用设计模式.ppt_第2页
第2页 / 共74页
JAVA常用设计模式.ppt_第3页
第3页 / 共74页
JAVA常用设计模式.ppt_第4页
第4页 / 共74页
JAVA常用设计模式.ppt_第5页
第5页 / 共74页
点击查看更多>>
资源描述

1、Java与设计模式,Lesson 1,设计模式,分类 创建模式 工厂模式;建造模式;原始模型模式;单例模式 结构模式 适配器;桥梁模式;合成模式;装饰模式;门面模式;享元模式;代理模式 行为模式 优点 面向界面编程 降低耦合性 增加灵活性,創建模式,设计模式之Factory -工厂模式,客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。 缺点是当产品修改时,工厂类也要做相应的修改。,设计模式之Factory -工厂模式,追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服

2、务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory,设计模式之Factory -工厂模式,public class Factory public static Sample creator(int which)/getClass 产生Sample 一般可使用动态类装载装入类。 if (which=1) return new SampleA(); else if (which=2) return new SampleB(); ,设计模式之FACTORY METHOD -工厂方法模式,核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负

3、责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。,设计模式之FACTORY METHOD -工厂模式,请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。,设计模式之FACTORY METHOD -工厂模式,public abstract class Factory public abstract Sample creator();public abstract Sample2 creator(String na

4、me); public class SimpleFactory extends Factorypublic Sample creator() . return new SampleA public Sample2 creator(String name) . return new Sample2A public class BombFactory extends Factorypublic Sample creator() return new SampleB public Sample2 creator(String name) return new Sample2B ,設計模式之Build

5、er -建造模式,将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。 建造模式可以强制实行一种分步骤进行的建造过程。,設計模式之Builder -建造模式,MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”builder。(这一定比美军在伊拉克用的翻译机好卖),設計模式之Bui

6、lder -建造模式,public interface Builder /創建部件A 比如創建汽車車輪 void buildPartA(); /創建部件B 比如創建汽車方向盤 void buildPartB(); /創建部件C 比如創建汽車發動機 void buildPartC(); /返回最後組裝成品結果 (返回最後裝配好的汽車) /成品的組裝過程不在這裏進行,而是轉移到下面的Director類別中進行。 /從而實現瞭解耦過程和部件 Product getResult(); public class Director private Builder builder; public Direc

7、tor( Builder builder ) this。builder = builder; / 將部件partA partB partC最後組成複雜物件 /這裏是將車輪 方向盤和發動機組裝成汽車的過程 public void construct() builder.buildPartA(); builder.buildPartB(); builder.buildPartC(); ,設計模式之PROTOTYPE -原始模型模式,通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确

8、定的等级结构,原始模型模式适用于任何的等级结构。 缺点是每一个类都必须配备一个克隆方法。,設計模式之PROTOTYPE -原始模型模式,跟MM用QQ聊天,一定要说些深情的话语了,我搜集了好多肉麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了。(100块钱一份,你要不要),設計模式之PROTOTYPE -原始模型模式,public abstract class AbstractSpoon implements Cloneable String spoonName; public void setSpoonName(String spoonName) this

9、.spoonName = spoonName; public String getSpoonName() return this.spoonName; public Object clone() Object object = null; try object = super.clone(); catch (CloneNotSupportedException exception) System.err.println(“AbstractSpoon is not Cloneable“); return object; public class SoupSpoon extends Abstrac

10、tSpoon public SoupSpoon() setSpoonName(“Soup Spoon“); public class SaladSpoon extends AbstractSpoon public SaladSpoon() setSpoonName(“Salad Spoon“); ,设计模式之Singleton -单例模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。 单例模式只应在有真正的“单一实例”的需求时才可使用。,设计模式之Singleton -单例模式,俺有6个漂亮的老婆,她们的老公都是我,我就是我们家里的老公Sigleton,她

11、们只要说道“老公”,都是指的同一个人,那就是我(刚才做了个梦啦,哪有这么好的事),设计模式之Singleton -单例模式,public class Singleton private static Singleton instance = null; public static synchronized Singleton getInstance() /这个方法比上面有所改进,不用每次都进行生成对象,只是第一次 /使用时生成实例,提高了效率! if (instance=null) instancenew Singleton(); return instance; ,結構模式,設計模式之Ada

12、pter -适配器,把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端。,設計模式之Adapter -适配器,在朋友聚会上碰到了一个美女Sarah,从香港来的,可我不会说粤语,她不会说普通话,只好求助于我的朋友kent了,他作为我和Sarah之间的Adapter,让我和Sarah可以相互交谈了(也不知道他会不会耍我),設計模式之Adapter -适配器,public interface IRoundPeg public void insertIntoHole(String msg); publ

13、ic interface ISquarePeg public void insert(String str); public class PegAdapter implements IRoundPeg,ISquarePeg private RoundPeg roundPeg; private SquarePeg squarePeg; / 構造方法 public PegAdapter(RoundPeg peg)this.roundPeg=peg; / 構造方法 public PegAdapter(SquarePeg peg)(this.squarePeg=peg;)public void ins

14、ert(String str) roundPeg.insertIntoHole(str);public void insertIntoHole(String str)SquarePeg.insert(str); ,設計模式之Bridge -桥梁模式,将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。,設計模式之Bridge -桥梁模式,早上碰到MM,要说早上好,晚上碰到MM,要说晚上好;碰到MM穿了件新衣服,要说你的衣服好漂亮哦,碰到MM新做的发型,要说你的头

15、发好漂亮哦。 不要问我“早上碰到MM新做了个发型怎么说”这种问题,自己用BRIDGE组合一下不就行了,設計模式之Bridge -桥梁模式,public abstract class Coffee CoffeeImp coffeeImp; public void setCoffeeImp() this.CoffeeImp = CoffeeImpSingleton.getTheCoffeImp(); public SodaImp getCoffeeImp() return this.CoffeeImp; public abstract void pourCoffee(); public abstr

16、act class CoffeeImp public abstract void pourCoffeeImp(); /bridge public class CoffeeImpSingleton private static CoffeeImp coffeeImp; public CoffeeImpSingleton(CoffeeImp coffeeImpIn) this.coffeeImp = coffeeImpIn; public static CoffeeImp getTheCoffeeImp() return coffeeImp; ,設計模式之Composite -合成模式,合成模式将

17、对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。 合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。,設計模式之Composite -合成模式,Mary今天过生日。“我过生日,你要送我一件礼物。”“嗯,好吧,去商店,你自己挑。”“这件T恤挺漂亮,买,这条裙子好看,买,这个包也不错,买。”“喂,买了三件了呀,我只答应送一件礼物的哦。”“什么呀,T恤加裙子加包包,正好配成一套呀,小姐,麻烦你包起来。”“”,MM都会用Composite模式了,你会了没有?,設計模式之Composite -

18、合成模式,public abstract class Equipment private String name; /網路價格 public abstract double netPrice(); /折扣價格 public abstract double discountPrice(); /增加部件方法 public boolean add(Equipment equipment) return false; /刪除部件方法 public boolean remove(Equipment equipment) return false; /注意這裏,這裏就提供一種用於訪問組合體類別的部件方法。

19、 public Iterator iter() return null; public Equipment(final String name) this.name=name; public class Disk extends Equipment abstract class CompositeEquipment extends Equipment,設計模式之DECORATOR -装饰模式,装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,提供比继承更多的灵活性。动态给一个对象增加功能,这些功能可以再动态的撤消。增加由一些基本功能的排列组合而产生的非常大量的功能。,設計模

20、式之DECORATOR -装饰模式,Mary过完轮到Sarly过生日,还是不要叫她自己挑了,不然这个月伙食费肯定玩完,拿出我去年在华山顶上照的照片,在背面写上“最好的的礼物,就是爱你的Fita”,再到街上礼品店买了个像框(卖礼品的MM也很漂亮哦),再找隔壁搞美术设计的Mike设计了一个漂亮的盒子装起来,我们都是Decorator,最终都在修饰我这个人呀,怎么样,看懂了吗?,設計模式之DECORATOR -装饰模式,public interface Work public void insert(); public class SquarePeg implements Work public v

21、oid insert() System.out.println(“方形樁插入“); public class Decorator implements Work private Work work; /額外增加的功能被打包在這個List中 private ArrayList others = new ArrayList(); /在構造器中使用組合new方式,引入Work物件; public Decorator(Work work) this.work=work; others.add(“挖坑“);others.add(“釘木板“); public void insert()newMethod(

22、); /在新方法中,我們在insert之前增加其他方法,這裏次序先後是用戶靈活指定的 public void newMethod() otherMethod(); work.insert(); public void otherMethod() ListIterator listIterator = others.listIterator(); while (listIterator.hasNext() System.out.println(String)(listIterator.next() + “ 正在進行“); ,設計模式之Facade -门面模式,外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。,設計模式之Facade -门面模式,我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,这样照出来的照片才专业,但MM可不懂这些,教了半天也不会。幸好相机有Facade设计模式,把相机调整到自动档,只要对准目标按快门就行了,一切由相机自动调整,这样MM也可以用这个相机给我拍张照片了。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > Java

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报