面向对象思想设计原则
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象思想设计原则相关的知识,希望对你有一定的参考价值。
设计模式:经验的总结,本质是一个思想,和具体的语言无关
分为创建型设计模式、结构型设计模式、行为型设计模式,共23个模式
创建型设计模式: 创建对象 6个 如简单工厂模式、工厂模式、单例模式
结构型设计模式: 对象的组成 7个
行为型设计模式:对象的功能 10个
简单工厂模式:定义一个具体的工厂类负责创建一些类的实例
优点:客户端不再需要负责对象的创建,从而明确了各个类的职责
弊端:每当有新的对象增加,就需要不断的修改工厂类,不利于后期的维护
代码
package cn.idcast; public abstract class Animal { public abstract void eat(); }
package cn.idcast; public class Cat extends Animal { @Override // TODO Auto-generated method stub public void eat() { System.out.println("猫吃鱼"); } }
package cn.idcast; public class Dog extends Animal { // TODO Auto-generated method stub public void eat() { System.out.println("狗吃肉"); } }
package cn.idcast; //简单工厂模式 public class AnimalDemo { public static void main(String[] args) { Animal a = AnimalFactory.createAinmal("dog"); System.out.println("狗吃肉"); a = AnimalFactory.createAinmal("cat"); System.out.println("猫吃鱼"); a=AnimalFactory.createAinmal("hahah"); System.out.println("暂时没有这种东西"); } }
package cn.idcast; public class AnimalFactory { private AnimalFactory() {} public static Animal createAinmal(String type) { if("dog".equals(type)) { return new Dog(); }else if("cat".equals(type)) { return new Cat(); }else { return null; } } }
工厂模式:抽象工厂类负责创建对象的接口,具体对象的创建工作和由继承抽象工厂的具体类实现 (大厂下面有小厂)
优点:客户端不再需要负责对象的创建,明确了各个类的职责,后期维护容易,增强了系统的扩展性
弊端:需要额外的编写代码,增加了工作量
代码
package cn.idcast2; public abstract class Animal { public abstract void eat(); }
package cn.idcast2; public interface AnimalFactory { public abstract Animal createAnimal(); }
package cn.idcast2; public class Dog extends Animal { // TODO Auto-generated method stub public void eat() { System.out.println("狗吃肉"); } }
package cn.idcast2; public class DogFactory implements AnimalFactory { // TODO Auto-generated method stub @Override public Animal createAnimal() { return new Dog(); } }
package cn.idcast2; //工厂模式 public class AnimalDemo { public static void main(String[] args) { AnimalFactory af = new DogFactory(); Animal a =af.createAnimal(); a.eat(); } }
以上是关于面向对象思想设计原则的主要内容,如果未能解决你的问题,请参考以下文章