![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
HeadFirst设计模式
文章平均质量分 54
久许
朋友拍了拍我,说我可不是什么幺蛾子
展开
-
设计模式之策略模式
一、使用继承可能不完美 二、使用接口也可能不完美 虽然Flyable与Quackable可以解决「一部分」的问题(不会再有会飞的橡皮鸭),但是却造成代码无法复用,这只能算是从一个恶梦跳进另一个恶梦。 三、解决思路 把会变化的部分取出并「封装」起来,好让其他部分不会受到影响。代码变化之后,出其不意的部分变得很少,系统变得更有弹性。 从现在开始,鸭子的行为将被放在分开的类中,此类专门提供某行为的实现。这样,鸭子类就不再需要知道行为的实现细节。 我们利用接...翻译 2021-08-19 12:23:16 · 126 阅读 · 0 评论 -
迭代器与组合模式
有许多种方法可以把对象堆起来成为一个集合。你可以把他们放进数组、堆栈、列表或者是散列表中, 为什么有两种不同的菜单实现方式会让事情变得复杂化, 如果能够找出一个方法,让他们的菜单实现一个相同的接口,该有多好!这样以来,我们就可以最小化女招待代码中的具体引用,同时还有希望拜托遍历这两个菜单所需的多个循环。 可以封装遍历吗? 如果你从本书学到了一件事情,那就是封装变化的部分。这里的“变化”是:由不同的集合类型所造成的遍历。 不同的遍历方式: 这正是一个设计模式,称为迭代器模式。它依.翻译 2021-03-11 20:30:26 · 149 阅读 · 0 评论 -
单件模式
getInstance()方法是静态的,这意味着它是一个类方法。所以可以在代码的任何地方使用SIngleton.getInstance()访问它。这和访问全局变量一样简单,只是多了一个优点:单件可以延迟实例化。 这里有两个线程都要执行这段代码:工作室扮演JVM角色判断两个线程是否可以产生两个实例。 只要把getInstance()变成同步(synchronized)方法,多线程灾难几乎就可以轻易地解决了: 这样的做法可以避免产生两个实例,但是同步会降低性能。很明显,需要确保单件模式能在多线层的原创 2021-03-10 20:31:46 · 150 阅读 · 0 评论 -
工厂模式
工厂处理创建对象的细节。 一、建立一个简单的比萨工厂 先从工厂本身开始,我们要定义一个类,为所有比萨封装创建对象的代码。简单工厂其实不是一个设计模式,反而比较像是一种编程习惯。 二、声明一个工厂方法 原本是由一个对象负责所有具体类的实例化,现在通过PizzaStore做一些小转变,变成由一群子类负责实例化。 PizzaStore.java package factorymode.interfac; public abstract class PizzaStore { public原创 2021-03-09 21:29:12 · 132 阅读 · 0 评论 -
观察者模式
一、目录结构 二、继承、实现关系图 三、代码 Subject.java package observemode.interfac.subj; import observemode.interfac.not_subj.Observer; public interface Subject{ public void registerObserver(Observer o); public void removeObserver(Observer o); public原创 2021-03-08 19:26:56 · 132 阅读 · 1 评论 -
装饰者模式
一、文件目录 二、继承关系图 三、代码 Beverage.jva package decoratormode.interfa; public abstract class Beverage { protected String description = "Unknown Beverage"; public abstract double cost(); public String getDescription(){ return descript原创 2021-03-08 18:55:50 · 128 阅读 · 0 评论