你这个命题是典型的策略模式(设计模式中的一种)
不同的交通工具就是每一个装在“锦囊”(接口)中的“锦囊妙计”(策略)
你可以搜索一下关键字“策略模式”
也可你看一下我这个故事:
刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题,
嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵呀,那咱们先看看这个场景是什么样子
的。
先说这个场景中的要素:三个妙计,一个锦囊,一个赵云,妙计是小亮同志给的,妙计是放置在锦囊
里,俗称就是锦囊妙计嘛,那赵云就是一个干活的人,从锦囊中取出妙计,执行,然后获胜,用JAVA 程序
怎么表现这个呢?
计是同一类型的东东,那咱就写个接口:
package comcbf4lifestrategy;
/
@author cbf4Life cbf4life@126com
I'm glad to share my knowledge with you all
首先定一个策略接口,这是诸葛亮老人家给赵云的三个锦囊妙计的接口
/
public interface IStrategy {
//每个锦囊妙计都是一个可执行的算法
public void operate();
}
您的设计模式
第 5 页
然后再写三个实现类,有三个妙计嘛:
package comcbf4lifestrategy;
/
@author cbf4Life cbf4life@126com
I'm glad to share my knowledge with you all
找乔国老帮忙,使孙权不能杀刘备
/
public class BackDoor implements IStrategy {
public void operate() {
Systemoutprintln("找乔国老帮忙,让吴国太给孙权施加压力");
}
}
package comcbf4lifestrategy;
/
@author cbf4Life cbf4life@126com
I'm glad to share my knowledge with you all
求吴国太开个绿灯
/
public class GivenGreenLight implements IStrategy {
public void operate() {
Systemoutprintln("求吴国太开个绿灯,放行!");
}
}
package comcbf4lifestrategy;
/
@author cbf4Life cbf4life@126com
I'm glad to share my knowledge with you all
孙夫人断后,挡住追兵
/
public class BlockEnemy implements IStrategy {
public void operate() {
您的设计模式
第 6 页
Systemoutprintln("孙夫人断后,挡住追兵");
}
}
好了,大家看看,三个妙计是有了,那需要有个地方放这些妙计呀,放锦囊呀:
package comcbf4lifestrategy;
/
@author cbf4Life cbf4life@126com
I'm glad to share my knowledge with you all
计谋有了,那还要有锦囊
/
public class Context {
//构造函数,你要使用那个妙计
private IStrategy straegy;
public Context(IStrategy strategy){
thisstraegy = strategy;
}
//使用计谋了,看我出招了
public void operate(){
thisstraegyoperate();
}
}
然后就是赵云雄赳赳的揣着三个锦囊,拉着已步入老年行列的、还想着娶纯情少女的、色迷迷的刘老
爷子去入赘了,嗨,还别说,小亮的三个妙计还真是不错,瞅瞅:
package comcbf4lifestrategy;
/
@author cbf4Life cbf4life@126com
I'm glad to share my knowledge with you all
/
public class ZhaoYun {
/
赵云出场了,他根据诸葛亮给他的交代,依次拆开妙计
/
public static void main(String[] args) {
Context context;
您的设计模式
第 7 页
//刚刚到吴国的时候拆第一个
Systemoutprintln("-----------刚刚到吴国的时候拆第一个-------------");
context = new Context(new BackDoor()); //拿到妙计
contextoperate(); //拆开执行
Systemoutprintln("\n\n\n\n\n\n\n\n");
//刘备乐不思蜀了,拆第二个了
Systemoutprintln("-----------刘备乐不思蜀了,拆第二个了-------------");
context = new Context(new GivenGreenLight());
contextoperate(); //执行了第二个锦囊了
Systemoutprintln("\n\n\n\n\n\n\n\n");
//孙权的小兵追了,咋办?拆第三个
Systemoutprintln("-----------孙权的小兵追了,咋办?拆第三个
-------------");
context = new Context(new BlockEnemy());
contextoperate(); //孙夫人退兵
Systemoutprintln("\n\n\n\n\n\n\n\n");
/
问题来了:赵云实际不知道是那个策略呀,他只知道拆第一个锦囊,
而不知道是BackDoor这个妙计,咋办? 似乎这个策略模式已经把计谋名称写出来了
错!BackDoor、GivenGreenLight、BlockEnemy只是一个代码,你写成first、second、
third,没人会说你错!
策略模式的好处就是:体现了高内聚低耦合的特性呀,缺点嘛,这个那个,我回去再查查
/
}
}
就这三招,搞的周郎是“陪了夫人又折兵”呀!这就是策略模式,高内聚低耦合的特点也表现出来了,
还有一个就是扩展性,也就是OCP 原则,策略类可以继续增加下去,只要修改Contextjava 就可以了,这
个不多说了,自己领会吧。
以上摘自网络,详情参考 >
public class Student { //定义一个学生类
private int StuNum; //学号
private int Class; //班级
private char Gender; //性别
private int Age; //年龄
public Student(int StuNum, int Class, char Gender, int Age){//构造函数
thisstuNum = StuNum;
thisclass = Class;
thisgender = Gender;
thisage = Age;
}
public int getStuNum() { //获得学号
return StuNum;
}
public int getClass() { //获得班级号
return Class;
}
public char getGender() { //获得性别
return Gender;
}
public void setGender(char Gender) { //修改性别
thisGender = Gender;
}
public int getAge() { //获得年龄
return Age;
}
public void setAge(int Age) { //修改年龄
thisAge = Age;
}
public class Pupil extends Student //小学生
{
//(由于没说派生后要新加什么东西,所以这里写了省略号,如果想在
// 新派生出来的类里加点什么特殊的东西,直接在省略号位置加就行了
// 下同)
}
public class MidSchoolStu extends Student //中学生
{
//
}
public class UnderGraduate extends Student //大学生
{
//
}
public class PostGraduate extends Student //研究生
{
//
}
public class FreshStudent extends UnderGraduate //一年级学生
{
//
}
public class Sophomore extends UnderGraduate //二年级学生
{
//
}
public class Junior extends UnderGraduate //三年级学生
{
//
}
public class Senior extends UnderGraduate //四年级学生
{
//
}
public class Master extends PostGraduate //硕士生
{
//
}
public class Doctor extends PostGraduate //博士生
{
//
}
主函数写错应该是:
public class Text_RC {
public static void main(String[] args) {
Circle r = new Circle(3);
Reck c = new Reck(3,5);
Systemoutprintln("圆的面积为:"+rmianji());
Systemoutprintln("圆的周长为:"+rzhouchang());
Systemoutprintln("矩形的面积为:"+cmianji());
Systemoutprintln("矩形的周长为:"+czhouchang());
}
}
package comshape;
public interface Volume {
double PI = 31415926;
//计算体积
public double calVolume();
//计算表面积
public double calArea();
}
package comshape;
//圆柱体
public class Cylinder implements Volume {
private double Radius ;
private double Height;
public Cylinder(double Radius, double Height) {
thisRadius = Radius;
thisHeight = Height;
}
public double getRadius() {
return Radius;
}
public void setRadius(double radius) {
Radius = radius;
}
public double getHeight() {
return Height;
}
public void setHeight(double height) {
Height = height;
}
@Override
public double calVolume() {
// TODO Auto-generated method stub
return PI Radius Radius Height;
}
@Override
public double calArea() {
// TODO Auto-generated method stub
return PI Radius Radius 2 + PI Radius Height 2;
}
}
package comshape;
//圆锥
public class Cone implements Volume {
private double Radius;
private double Height;
public double getRadius() {
return Radius;
}
public void setRadius(double radius) {
Radius = radius;
}
public double getHeight() {
return Height;
}
public void setHeight(double height) {
Height = height;
}
public Cone(double Radius, double Height) {
thisRadius = Radius;
thisHeight = Height;
}
//圆锥体的母线的长
public double getConeLine() {
double Line = Radius Radius + Height Height;
return Mathsqrt(Line);
}
@Override
public double calVolume() {
// TODO Auto-generated method stub
return PI Radius Radius Height / 3;
}
@Override
public double calArea() {
// TODO Auto-generated method stub
return PI Radius Radius + PI Radius getConeLine();
}
}
public class ShapeTestDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Cylinder cy = new Cylinder(3, 4);
Systemoutprintln(cycalVolume());
Systemoutprintln(cycalArea());
Cone cone = new Cone(3, 4);
Systemoutprintln(conecalVolume());
Systemoutprintln(conegetConeLine());
Systemoutprintln(conecalArea());
}
}
//Muitiplication接口
public interface Muitiplication{
double mult(double a, double b);
}
//MuitiplicationImpl实现类
public class MuitiplicationImpl implements Muitiplication{
public double mult(double a, double b){
return a b;
}
}
//MuitiplicationImpls实现类
public class MuitiplicationImpls implements Muitiplication{
public double mult(double a, double b){
return a + b;
}
}
public static void main(args[]){
MuitiplicationImpl m = new MuitiplicationImpl();
Systemoutprintln(mmult(1001,1001));
MuitiplicationImpls ms = new MuitiplicationImpls();
Systemoutprintln(msmult(1001,1001));
}
以上就是关于Java 接口程序全部的内容,包括:Java 接口程序、关于JAVA接口程序设计、请求JAVA简单编程实验报告:编写一个接口定义,产生一年的12个月的一组常量为:1.2.3.4.5.6.7.8.9.10.11等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)