Clevebaby 2019-06-26
1、面向对象OO = 面向对象分析OOA + 面向对象设计OOD + 面向对象编程OOP
2、编程是一门技术、同时也是一门艺术
3、应该面向接口编程,而不是面向实现编程
设计模式是一种被反复使用、多数人知晓的、代码设计经验的总结。使用设计模式是为了可重用代码,让代码更容易被别人理解、保证代码的可靠性。
简单来说就是把一个类的接口转换成我们所希望的接口,使原来不能一起工作的两个类能在一起工作。比如生活中的电源适配器,DP转HDMI线、Type-C转USB。
1、类适配器是通过继承类适配来实现的,另外类适配器实现客户类所需的接口。当客户端调用适配器类方法时,适配器内部调用它所继承的适配者的方法。
public class Adapter extends Adapteree implements Target { public void request() { this.doXxx(); } }
2、对象设配器包含一个适配器者的引用,与类适配器相同,对象适配器也实现了客户端所需的接口,当客户对象调用对象适配器的方法时,对象适配器调它所包含的适配器者实例的方法。
public class Adapter implements Target { Adapteree adapteree = new Adapteree(); public void request() { adapteree.doXxx(); } }
对于两种不同的适配客户端代码其实是一样的,
public class Client { public static void main(String ... args) { Target t = new Adapter(); t.doXxx(); } }
我们需要实现某些功能,这些功能已有还不太成熟的一个或多个外部组件,如果我们自己重新开发这些功能会花费大量时间;所以很多情况下会选择先暂时使用外部组件,以后再考虑随时替换。但这样一来,会带来一个问题,随着对外部组件库的替换,可能需要对引用该外部组件的源代码进行大面积的修改,因此也极可能引入新的问题等等。如何最大限度的降低修改面呢
?
Adapter模式就是针对这种类似需求而提出来的。
Adapter模式通过定义一个新的接口(对要实现的功能加以抽象),和一个实现该接口的Adapter(适配器)类来透明地调用外部组件。这样替换外部组件时,最多只要修改几个Adapter类就可以了,其他源代码都不会受到影响。
1、通过继承实现Adapter
2、通过委让实现Adapter
目标类
public class Target { public void useTyper_C() { System.out.println("使用Type-C数据线"); } }
适配类
/** * Created by guo on 19/2/2018. * */ public class Adapter extends Target { private Target target; public Adapter(Target target) { this.target = target; } public void useUSB() { System.out.println("使用Type-C转USB适配线"); this.target.useTyper_C(); } }
主函数
/** * Created by guo on 19/2/2018. */ public class MainClass { public static void main(String[] args) { Adapter adapter = new Adapter(new Target()); adapter.useUSB(); } }
当前,不少公司使用Spring整合Hibernate进行系统开发。对于Spring而言,它提供了HibernateDaoSupport、HibernaterTemplate、HibernateCallBack等工具类或接口来支持DAO组件的实现。
1、父DAO接口
import java.util.List; public interface FatherDAO { void saveInfo(Object obj1); void delInfo(Object obj2); Object findByNo(String no); List findAll(); }
2、通用DAO适配器
import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import java.util.List; /** * Created by guo on 19/2/2018. * 通用DAO适配器 */ public abstract class FatherDaoAdapter extends HibernateDaoSupport implements FatherDAO { protected FatherDaoAdapter() { } public void saveInfo(Object obj1) { getHibernateTemplate().saveOrUpdate(obj1); } public void delInfo(Object obj2) { getHibernateTemplate().delete(obj2 ); } public List findAll(String objName) { String Searching = "from" + objName; return getHibernateTemplate().find(Searching); } }
3、登录DAO接口
/** * Created by guo on 19/2/2018. * 登录Dao接口 */ public interface LoginDao extends FatherDAO { List findByName(String name); List findByPassWord(String password); }
4、登录DAO实现类
import java.util.List; /** * Created by guo on 19/2/2018. */ public abstract class LoginDaoLmpl extends FatherDaoAdapter implements LoginDao { public static final String LOGIN = "Spring.adaper.Login"; public static final String NAME = "guo"; public static final String PASSWORD = "admin"; @Override public List findAll() { return super.findAll(NAME); } }
1、本文参考大话设计模式、北风网教程。推荐大家看Java Web设计模式之道。
2、新手学习语言最好的方法是模仿,思考别人为啥这么写。
3、希望自己有一天也可以写出真正属于自己的文章。
4、GitHub 欢迎点赞,算是对我最大的鼓舞。
5、越努力,越幸运。美好的事,总会在不经意间发生。2018 加油。