设计模式:七大原则

①.单一职责原则:每一个类只干一件事,只对一件事负责。

②.接口隔离原则:每一个类只实现最小的接口 对于接口中有不会用到的类,我们将接口分开变小。

③.依赖倒置原则:面向接口编程。依赖传递关系的三种方法:接口传递、构造器传递、setter方法传递。

package com.acofkings.principle.inversion;

public class DependecyInversion {

	public static void main(String[] args) {
		
		ChangHong changhong = new ChangHong();
		//1.接口传递依赖
		OpenAndClose openAndClose = new OpenAndClose();
		openAndClose.open(changhong);
//		//2.构造器传递依赖
//		OpenAndClose openAndClose = new OpenAndClose(changhong);
//		openAndClose.open();
//		//3.setter方法传递
//		OpenAndClose openAndClose = new OpenAndClose();
//		openAndClose.setITV(changhong);
//		openAndClose.open();
	}
}
//1.接口传递依赖
interface IOpenAndClose{
	public void open(ITV tv);
}
interface ITV{
	public void play();
}
class OpenAndClose implements IOpenAndClose{

	@Override
	public void open(ITV tv) {
		// TODO Auto-generated method stub
		tv.play();
	}
}
class ChangHong implements ITV {
	
	@Override
	public void play()
	{
		System.out.println("长虹电视机,打开");
	}
}
2.构造器传递依赖
//interface IopenAndClose{
//	public void open();
//}
//interface ITV {
//	public void play(); 
//}
//class OpenAndClose implements IopenAndClose{
//	public ITV tv;
//	public OpenAndClose(ITV tv){
//		this.tv = tv;
//	}
//	@Override
//	public void open() {
//		// TODO Auto-generated method stub
//		this.tv.play();
//	}
//}
//class ChangHong implements ITV{
//
//	@Override
//	public void play() {
//		// TODO Auto-generated method stub
//		System.out.println("长虹电视机,打开");
//	}
//}
3.setter方法传递
//interface IOpenAndClose{
//	public void open();
//}
//interface ITV{
//	public void play();
//}
//class OpenAndClose implements IOpenAndClose{
//	private ITV tv;
//	public void setITV(ITV tv)
//	{
//		this.tv = tv;
//	}
//	@Override
//	public void open() {
//		// TODO Auto-generated method stub
//		tv.play();
//	}
//}
//class ChangHong implements ITV{
//
//	@Override
//	public void play() {
//		// TODO Auto-generated method stub
//		System.out.println("长虹电视机,打开");
//	}
//}

④.里式替换原则:在子类中尽量不要重写父类的方法。继承实际上让两个类耦合性增强了,在适当的情况下,可以通过聚合,组合,依赖 来解决问题。

.开闭原则:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

把创建Shape类做成抽象类,并提供一个抽象的draw方法,让子类去实现即可,这样我们有新的图形种类时,只需要让新的图形类继承Shape,并实现draw方法即可,使用方的代码就不需要修改

package com.acofkings.principle.ocp;

public class Ocp {

	public static void main(String[] args) {
		 GraphicEditor graphicEditor = new GraphicEditor();
		 graphicEditor.drawShape(new Rectangle());
		 graphicEditor.drawShape(new Circle());
		 graphicEditor.drawShape(new Triangle());
		 graphicEditor.drawShape(new Other());
	}
}

class GraphicEditor{
	public void drawShape(Shape s)
	{
		s.draw();
	}
}

abstract class Shape{
	public abstract void draw();
}

class Rectangle extends Shape{

	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println("绘制一个矩形");
	}
}
class Circle extends Shape{

	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println("绘制一个圆形");
	}
}

class Triangle extends Shape{

	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println("绘制一个三角形");
	}
	
}
//当需要改变时,我们只需要新增而不需要修改原有代码
class Other extends Shape{

	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println("绘制其他图形");
	}
}

⑥.迪米特法则:又称为最少知道原则,只与直接朋友(称出现成员变量,方法参数,方法返回值中的类为直接的朋友)进行通信,降低类之间的耦合

⑦.合成复用原则:原则是尽量使用合成/聚合的方式,而不是使用继承

//依赖
class A{
}
class B{
	public void function(A a) {
		
	}
}
//组合:整体和部分不可分开
class A{
}
class B{
	A a = new A();
}
//聚合:整体和部分可分开
class A{
}
class B{
	A a;
	public void setA(A a)
	{
		this.a =a;
	}
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值