前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式(-)-工厂模式介绍

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

原创
作者头像
用户2288853
修改2018-06-05 09:42:03
4190
修改2018-06-05 09:42:03
举报
文章被收录于专栏:向上的小草向上的小草

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

#简单工厂模式

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

```

可维护

可复用

可扩展

灵活性

```

*活字印刷的优点正好体现了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,就可以了,降低耦合**

#单一职责

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

#开发-封闭原则

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

例如:

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档