设计模式(-)-工厂模式介绍

>今天介绍的几个设计模式是前一段时间看《大话设计模式》这本书中介绍的,做个笔记记录下看完的前几章节的内容。不足之处欢迎指正。

#简单工厂模式

*古代四大发明--活字印刷,里面有四大好处:*

```

可维护

可复用

可扩展

灵活性

```

*活字印刷的优点正好体现了java面向对象的好处

java通过封装,继承,多态把程序的耦合度降低,在没有活字印刷术之前,传统的印刷术把所有字都刻在同一版面上造成耦合度太高。

用设计模式可以让程序更加的灵活,容易修改,便于复用*

**这里的复用跟复制是完全不一样的哦,复制代码会冗余,复用是将需要的代码在需要的地方直接引用就行了。例如我们平常开发的时候将业务和计算分开显示。**

>下面通过一个简单代码来了解下工厂模式

```

//动物类

abstract class Animal {

//动物有新陈代谢的功能

public void Metabolism(Oxygen oxygen, Water water) {

};

}

//鸟类

public class Bird extends Animal {

private Wing wing;

public Bird() {

wing = new Wing();//鸟在初始化时就有翅膀

}

public egg() {

}

}

//企鹅

public class Penguin extends Bird {

private Climate climate;

public egg() {

}

}

```

**企鹅是一种特别的鸟,会游泳不会飞,从它的属性来看与气候有关联(常年在寒冷地区),所以它需要知道气候的变化,“了解”气候。**

```

------------------------------------------------------------

//飞翔的借口

public interface Fly {

//飞行能力

void fly();

}

//大雁

public class WideGoose extends Animal implements Fly {

@Override

public void fly() {

}

public egg() {

}

}

//雁群

public class WideGooseGroup {

private WideGoose[] wideGooseGroup;

}

```

大雁是群居动物,每只大雁都是属于一个雁群,一个雁群可以又多只大雁。所以它们之间就满足聚合关系。

**聚合表示一种弱的拥有关系,体现的是A对象可以包含B对象,当B对象不是A对象的一部分;

合成是一种强的拥有关系,体现了严格的部分和整体的生命周期一样,在上述Bird类中鸟和翅膀Wind就是组合关系,它们是部分和整体的关系,并且翅膀和鸟的生命周期是相同的。**

#策略模式

>策略模式是一种定义一系列算法的方法,从概念上看,所有的这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少各种算法类与使用算法之间的耦合。还有个优点是简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试

```

abstract class CashSuper {

public abstract double acceptCash(double money);

}

public class CashNormal extends CashSuper {

@Override

public double acceptCash(double money) {

//计算方法

return money;

}

}

public class CashRebate extends CashSuper {

@Override

public double acceptCash(double money) {

//计算方法

return money;

}

}

public class CashReturn extends CashSuper {

@Override

public double acceptCash(double money) {

//计算方法

return money;

}

}

public class CashContext {

private CashSuper cashSuper = null;

public CashContext(String type) {

switch (type) {

case "正常收费" :

CashNormal cashNormal = new CashNormal();

cashSuper = cashNormal;

break;

case "满200减50" :

CashReturn cashReturn = new CashReturn();

cashSuper = cashReturn;

break;

case "8折" :

CashRebate cashRebate = new CashRebate();

cashSuper = cashRebate;

break;

}

}

public double getResult(double money) {

return cashSuper.acceptCash(money);

}

}

```

**策略模式与简单工厂模式结合,客户端只需要认识一个类CashContext,就可以了,降低耦合**

#单一职责

>如果一个类的职责过多,就等于把这些职责耦合在一起,在单一职责中,需要清楚的将逻辑分块分好。

#开发-封闭原则

>通过抽象类,一些面向对象的手段(如继承,多态来隔离具体方法),面对新的需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码-----开发/封闭原则

例如:

**以前对工厂模式比较模糊,希望通过笔记更加清楚的理解何为工厂模式,如何使用工厂模式,待我再看些内容,再做笔记。一起学习,一起进步。**

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏算法channel

问答记录贴 1 | 解析 NumPy 的广播(broadcasting)机制

实践出真知,相互讨论碰撞出思想的火花。【原创互助答疑群】内有的问答很精彩。于是脑子里闪现出一个想法,为什么不把整个的问答过程记录总结下来,分享给更多的小伙伴呢?...

12410
来自专栏Python中文社区

Python时间处理完全手册

專 欄 ❈ gw1770df,Python中文社区专栏作者,从事Python开发工作,全栈工程师。 博客: https://word.gw1770df.cc ...

35760
来自专栏YoungGy

ML基石_8_NoiseAndError

recap Noise and Probabilistic Target noise来源 Probabilistic Target Error Measure ...

20350
来自专栏恰童鞋骚年

设计模式的征途—16.访问者(Visitor)模式

在患者就医时,医生会根据病情开具处方单,很多医院都会存在以下这个流程:划价人员拿到处方单之后根据药品名称和数量计算总价,而药房工作人员根据药品名称和数量准备药品...

11620
来自专栏Python绿色通道

Python爬虫:使用requests+re来爬取豆瓣图书

这两天在知识星球上有球友在使用requests+re来爬豆瓣图书的链接,书名及作者遇到了问题,虽然当时很快给他解决了,但由于我之前没有写这方面的文章,所以临时决...

50030
来自专栏不二小段

【爬虫与反爬】记一次网址编码研究

相爱相杀的爬虫与反爬工程师啊……愿你们和谐相处。 前些日子写爬虫时遇到一个比较奇怪的编码,是构造目标网址的一个组成部分,我更倾向于说是编码而不是加密,虽然的确有...

35180
来自专栏web编程技术分享

从啥也不会到可以胜任最基本的JavaWeb工作,推荐给新人的学习路线(二)

33550
来自专栏牛客网

听说有人想要爱奇艺面经?

23100
来自专栏从流域到海域

《笨办法学python》 第14课手记

《笨办法学Python》 第14课手记 本节课将argv和raw_input和起来使用,作者在之前说,这个组合是个蛮顺手的用法。请注意,引入argv并使用arg...

246100
来自专栏CSDN技术头条

关系型数据库是如何运作的(上)

一说到关系型数据库,我总感觉缺了点什么。如果你尝试透过“关系型数据库是如何运作的”的关键词句来进行搜索,其搜索结果是少量的而且内容是简短的。难道说是由于它已经太...

22380

扫码关注云+社区

领取腾讯云代金券