设计模式

本文介绍了设计模式的概念,包括它是软件开发中的经验总结,有助于提高代码复用性和团队沟通。设计模式分为23种,如简单工厂模式和工厂方法模式。面向对象设计原则涵盖单一职责原则、开闭原则等,指导开发者做出利于系统复用的设计选择。简单工厂模式通过移除耦合,实现了Service与Dao的解耦。工厂方法模式则进一步抽象,提供了创建产品对象的灵活性,遵循开闭原则。
摘要由CSDN通过智能技术生成

一、设计模式的概念
1.设计模式简介
1.软件设计中的“三十六计”
2.是人们在长期的软件开发中的经验总结
3.是对某些特定问题的经过实践检验的特定解决方法
4.被广泛运用在Java框架技术中

2.设计模式的优点
设计模式是可复用的面向对象软件的基础
可以更加简单方便地复用成功的设计和体系结构
帮助开发者做出有利于系统复用的选择,避免损害系统复用性的设计
使其他开发者更加容易理解其设计思路,便于团队交流
3.设计模式分类
1.GoF(Gang of Four,四人组)设计模式
分为23种

 4.软件可复用问题

二、面向对象设计原则
1.单一职责原则
一个类应该有且仅有一个引起它变化的原因
一个类应该只负责一个职责
开闭原则
对扩展开放,对修改关闭
里氏替换原则
引用基类的地方必须能透明地使用其子类的对象
可以用来判断继承关系是否合理
依赖倒置原则
依赖于抽象而不依赖于具体实现,针对接口编程
接口隔离原则
尽量将庞大臃肿的接口拆分成更小更具体的接口
接口中只包含客户感兴趣的方法
迪米特法则
又称最少知道原则
一个软件实体应当尽可能少地与其他实体发生相互作用
合成复用原则
尽量使用组合/聚合的方式而不是继承关系达到软件复用的目的
是has-a关系

三、简单工厂模式
1.如何解决类似“Service与某个具体Dao实现”耦合的问题?

public class NewsServiceImpl implements NewsService {
	private NewsDao dao = new NewsDaoImpl();
}

2.分析
将创建工作转移出来
避免在Service中创建具体的Dao实现类,产生耦合
注意:简单工厂模式,又叫做静态工厂方法模式,不属于GoF的23种设计模式之一,可以理解为工厂模式的一个特殊实现
依据依赖倒置原则,使用setter方法传递依赖关系
减少Service对工厂类的依赖,降低耦合

public class NewsServiceImpl implements NewsService {
	private NewsDao dao;
	public void setDao(NewsDao dao) {
		this.dao = dao;
	}
}

简单工厂模式可以根据参数的不同返回不同类的实例
被创建的实例通常都具有共同的父类`

 // 创建NewsDao实例的工厂方法
    public static NewsDao getInstance(String key) {
        switch (key) {
            case "mysql":
                return new NewsDaoMySqlImpl();
            case "oracle":
                return new NewsDaoOracleImpl();
            case "redis":
                return new NewsDaoRedisImpl();
            default:
                throw new RuntimeException("无效的数据库类型:" + key
                                + " ,DAO获取失败");
        }
    }

四:工厂方法模式
1.对简单工厂模式的进一步抽象化
2.工厂方法模式的主要角色如下
抽象产品(Product)
抽象工厂(Abstract Factory)
具体产品(Concrete Product)
具体工厂(Concrete Factory)
在这里插入图片描述
优点
只需要知道具体工厂就可得到所要的产品,无须知道产品的具体创建过程
基于多态,便于对复杂逻辑进行封装管理
增加新的产品时无须对原工厂进行任何修改,满足开闭原则
缺点
每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值