首页 > 代码库 > java面向对象与设计模式(一)
java面向对象与设计模式(一)
设计原则:SOLID 可以说,五个设计原则各司其职。
单一职责原则(S):用于类的设计
开闭原则(O):总的指导思想
里氏替换原则(L):用于指导类继承的设计
接口隔离原则(I):用于指导接口的设计
依赖翻转原则(D):用于指导如何抽象
类之间的关系:
继承=实现>组合>聚合>关联>依赖
UML表现:
继承:带三角箭头的实线,箭头指向父类
继承:带三角箭头的实线,箭头指向父类
实现:带三角箭头的虚线,箭头指向接口
组合:带实心菱形的实线,菱形指向整体
聚合:带空心菱形的实线,菱形指向整体
关联:带普通箭头的实线,指向被拥有者
依赖:带普通箭头的虚线,指向被使用者
简
单说明一下,《1》继承和实现是java自带的,属于强耦合关系;《2》组合和聚合是特殊的关联关系,关联关系体现在代码上就是作为成员变量,聚合关系要
强于关联关系,代码上往往会通过set()方法完成对成员变量的赋值,组合关系则更加强一些,往往在构造函数就完成了初始化,也就是说,在一般情况下,生
命周期上组合>聚合>关联;《3》依赖和关联恰恰相反,代码上一般不出现在成员变量。常见于局部变量、方法的参数或者对静态方法的调用。
设计模式:(经典23式)
设计模式的核心在于复用,如果单用,则成为累赘。
第零式 简单工厂模式。
预备知识:接口
接口能够隔离封装,为系统的可插拔性提供保证。在接口也抽象类的选择上,应该优先选择接口,只有需要为子类提供公共功能的时候,才需要考虑抽象类。
下面举个例子,说明接口的具体实现。
接口能够隔离封装,为系统的可插拔性提供保证。在接口也抽象类的选择上,应该优先选择接口,只有需要为子类提供公共功能的时候,才需要考虑抽象类。
下面举个例子,说明接口的具体实现。
public interface product { public void createProduct(); } public class conCreteProduct implements product { @Override public void createProduct() { // TODO Auto-generated method stub System.out.println("生产产品"); } } public class user { public static void main(String[] args) { // TODO Auto-generated method stub product prod1 = new conCreteProduct(); prod1.createProduct(); } }
public interface product { public void createProduct(); } public class conCreteProduct implements product { @Override public void createProduct() { // TODO Auto-generated method stub System.out.println("生产产品"); } } public class factory { public void createProduct() { product prod1 = new conCreteProduct(); prod1.createProduct(); } } public class user { public static void main(String[] args) { // TODO Auto-generated method stub factory fact1 = new factory(); fact1.createProduct(); } }
简单工厂模式的定义:提供一个创建对象实例的功能,而无须关心其具体实现。被创建对象的类型,可以是接口,抽象类,也可以是具体的类。
简单工厂的本质是选择实现。优点在于帮助封装和解耦,缺点则在于增加了客户端复杂度以及不利于扩展子工厂。
简单工厂常采用静态方法来实现,所以有时被称作静态工厂。为了选择实现,还可以把选择的部分配置到配置文件当中去。
public interface product { public void makeProduct(); } public class concreteProduct implements product { @Override public void makeProduct() { // TODO Auto-generated method stub System.out.println("中国制造"); } } public class factory { public static product makeProduct() { Properties pro = new Properties(); InputStream in = null; try { in = factory.class.getResourceAsStream("factory.properties"); pro.load(in); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { in.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } product prod = null; try { prod = (product) Class.forName(pro.getProperty("product1")).newInstance(); } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return prod; } } public class user { public static void main(String[] args) { // TODO Auto-generated method stub product prod = factory.makeProduct(); prod.makeProduct(); } } 配置文件factory.properties product1=No0.concreteProduct
java面向对象与设计模式(一)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。