A类中直接实例化B类,然后java调用api接口实例B类的方法不行吗

public class pagectrl : pagebase
private string _pageTitle = ""; //不能使用静态字段
public string PageTitle
get { return _pageT }
set { _pageTitle = }
public void Header() //需要引用_pageTitle变量,不能使用静态方法
HttpContext.Current.Response.Write("&html&&head&&meta http-equiv=\"Content-Type\" content=\"text/ charset=utf-8\" /&&title&" + (_pageTitle.Length & 0 ? _pageTitle + " - " : "") + "我的网站&/title&&link rel=\"stylesheet\" href=\"images/common/common.css\" /&script type=\"text/javascript\" src=\"js/common.js\"&&/script&&/head&&body&");
public void Footer()
HttpContext.Current.Response.Write("&/body&&/html&");
public partial class login : pagebase{
protected internal pagectrl pc = new pagectrl();//每页都要实例化一次,太麻烦啦
protected void Page_Load(object sender, EventArgs e)
string action = fun.SafeRequest(3, "action", 0);
if (action == "login")
else if (action == "logout")
ClearCookies();
pc.PageTitle = "登陆";
pc.Header();
pc.Footer();
如果网站功能比较复杂,例如再加个Cache缓存类、定时清理无效数据的Task类等等,那岂是不是每个页面都要new一下这些类,那该多麻烦啊。
提问于: 17:06
分享您的问题
其他回答(4)
当然不能啊
可以这样:
修改继承层次,将调用较多公用的方法放在父类
使用current字段,如常用的httpcontext.current...
public a current
return new a();
园豆:3395
实例化方法,必须由实例化对象调用,这是面向对象的根本原则
你可以将这些方法放在pagebase类中,login继承自pagebase,那么在login中就不要实例化类了,因为是父类中的方法,直接调用就可以了
园豆:4611
园豆:40785
&&&您需要以后才能回答,未注册用户请先。Spring新手对依赖注入的理解 - http://www./ - ITeye技术网站
今天学了一下Spring的依赖注入,也称作是“反转控制”。
&& 当一个类A需要用到另一个类B的对象的时候,通常情况下,就是在A中实例化一个B类的对象,然后通过对象来调用B类中的非私有变量和方法。这是不符合工厂设计模式的要求的,并且这样的设计方式存在很多的缺陷:
& 其一,A类去主动调用B类的构造方法,这就使得A类和B类之间的关系非常紧密,在Java程序设计的过程中,这种两个类之间关系非常紧密的情况是非常忌讳发生的,因为结合紧密的两个类在程序设计过程中会很难进行调试,尤其是在大的程序中,如果一连串的类之间发生调用关系,那么如果其中某一个类发生了改变,或者说某一个或者几个类发生了错误,需要调试,那么,所有调用到这几个类的类都要进行相应的修改,这是很麻烦的事情。
&& 其二,A类调用B类的方法,这就说明,A类必须知道B类方法的实现方式,这样使得AB之间的耦合度相当高,这也是不利于Java程序设计的。整个java程序设计的发展历史,就是一个怎样在类与类之间解耦的过程,让有关联的类处于一个松耦合的状态,这是java编程所追求的一个目标。
& Spring框架是工厂设计模式的一个非常好的体现,也同样特别注意了“解耦”,同样,它也是用接口的方式将程序解耦发挥到一个新的境界的框架。
&& 同样引用上面的例子,类A需要用类B的方法,在Spring框架中,不再是由A去主动调用B的构造方法,而是由Spring容器来完成,Spring容器只需要知道A需要得到哪个Bean的实例,就会帮A去创建一个B的实例,并不需要A自己去调用B的构造方法,Spring怎么知道A需要哪个Bean的实例?这就要涉及到Spring的IoC容器,它是一个“工厂”,可以对每个Bean以配置文件的形式进行管理,而A需要B对象的时候,就只要创建一个工厂实例,然后通过工厂实例来获得一个B的bean实例,这样就可以去使用类B的非私有成员了。
& 从整体上看,所有的类并没有和于它关联的类有任何的直接联系,所有的类都通过配置文件的形式,“挂”到Spring容器里去了,由Spring容器统一管理。调用者直接等待容器把被调用者的实例“注入”进来,然后使用。由此可以想象,Spring容器的功能应该有多强大。
Irving_wei
浏览: 96869 次
来自: Heaven
借鉴学习下
哥们,为什么运行不出来啊
wj99 写道我也想请教一下,请问兄台QQ号多少啊?
3154 ...
我也想请教一下,请问兄台QQ号多少啊?新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 9, 距离下一级还需 191 积分
论坛徽章:0
如题所示,目前卡在此处好几天没有思路,还请高人指点,万分感谢!
from tkinter import *
User_Val = ['','','']
SuperUser_Flag = 1
SuperUser_DayAddNum = 3
NormalUser_DayNum = 7
#B类,输入用户名
class UserInsertClass():
& & def __init__(self,root):
& && &&&frame = Frame(root)
& && &&&frame.pack()
& && &&&Label(frame, text='User').grid(row=0, column=0)
& && &&&self.name_str = StringVar()
& && &&&Entry(frame, textvariable=self.name_str).grid(row=0, column=1)
& && &&&button = Button(frame, text='Insert',command=self.Quit)
& && &&&button.grid(row=2, columnspan=2)
& && &&&self.root = root
& & def UserInsert(self,UserVal,SourceFile,SuperUserFlag,NormalUserDayNum,SuperUserDayAddNum):
& && &&&UserVal[0] = self.name_str.get()&&#此处无法获取用户输入的数据,如果只定义UserInsertClass这个类,不在App类的方法中调用就可以正常获取用户输入
& && &&&print(UserVal[0],6)
& & def Quit(self):& && && && && && && && && && && && && && && && && && && && && &
& && &&&self.root.quit()
#A类,主界面
class App:
& & def __init__(self,root):
& && &&&self.root = root
& && &&&frame = Frame(root)
& && &&&frame.pack()
& && &&&Label(frame,text='System').grid(row=0,column=0)
& && &&&button = Button(frame,text='New',command=self.InsertFunc)
& && &&&button.grid(row=1)
& & def InsertFunc(self):
& && &&&#load file
& && &&&with open('Test.txt') as Source_file:
& && && && &SourceFile_str = Source_file.read()
& && &&&#convert 'str' to 'list'
& && &&&SourceFile_list = list(eval(SourceFile_str))
& && &&&root = Tk()
& && &&&root.wm_title('New')
& && &&&UserInsertApp = UserInsertClass(root)
& && &&&root.mainloop()
& && &&&#调用B类的方法
& && &&&UserInsertApp.UserInsert(User_Val,SourceFile_list,SuperUser_Flag,NormalUser_DayNum,SuperUser_DayAddNum)
approot = Tk()
approot.wm_title('System')
app = App(approot)
approot.mainloop()
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
白手起家, 积分 9, 距离下一级还需 191 积分
论坛徽章:0
johnsonchen313
只使用B类,StringVar()的值是可以传递到get()中的,还请高手指点~
from tkinter import *
User_Val = ['','','']
SuperUser_Flag = 1
SuperUser_DayAddNum = 3
NormalUser_DayNum = 7
#B类,输入用户名
class UserInsertClass():
& & def __init__(self,root):
& && &&&frame = Frame(root)
& && &&&frame.pack()
& && &&&Label(frame, text='User').grid(row=0, column=0)
& && &&&self.name_str = StringVar()
& && &&&Entry(frame, textvariable=self.name_str).grid(row=0, column=1)
& && &&&button = Button(frame, text='Insert',command=self.Quit)
& && &&&button.grid(row=2, columnspan=2)
& && &&&self.root = root
& & def UserInsert(self,UserVal,SourceFile,SuperUserFlag,NormalUserDayNum,SuperUserDayAddNum):
& && &&&UserVal[0] = self.name_str.get()&&#此处无法获取用户输入的数据,如果只定义UserInsertClass这个类,不在App类的方法中调用就可以正常获取用户输入
& && &&&print(UserVal[0],6)
& & def Quit(self):& && && && && && && && && && && && && && && && && && && && && &
& && &&&self.root.quit()
#load file
with open('Test.txt') as Source_file:
& & SourceFile_str = Source_file.read()
#convert 'str' to 'list'
SourceFile_list = list(eval(SourceFile_str))
root = Tk()
root.wm_title('New')
UserInsertApp = UserInsertClass(root)
root.mainloop()
#调用B类的方法
UserInsertApp.UserInsert(User_Val,SourceFile_list,SuperUser_Flag,NormalUser_DayNum,SuperUser_DayAddNum)
小富即安, 积分 4776, 距离下一级还需 224 积分
论坛徽章:4
本帖最后由 icymirror 于
14:26 编辑
johnsonchen313
只有一个地方有问题。
UserInsertApp = UserInsertClass(root)
UserInsertApp = UserInsertClass(self.root)
因为你后来需要使用的不是系统的Tk实例,而是App对象的Tk实例。
并且,在App类里面的TK实例化过程不再需要,因为App在实例化之后,本身就包含Tk实例。
换句话说:
root = Tk()& && && && && & # 删除
root.wm_title('New')& & # 修改或者删除,根据具体情况定
另:tkinter应当是Tkinter吧?
白手起家, 积分 9, 距离下一级还需 191 积分
论坛徽章:0
本帖最后由 johnsonchen313 于
18:53 编辑
感谢回复!
可能我之前对问题描述得不够详细,我设计界面的时候考虑在app窗口能有多个选择按键,每个按键能调出对应的类实例完成相应的操作,如果按照您回复中所述实现,所有的操作和输入将在同一个窗口,和我的初衷不相符,想问下我的想法能否在tkinter实现?我用的是python3.4版本
白手起家, 积分 9, 距离下一级还需 191 积分
论坛徽章:0
感谢回复!
可能我之前对问题描述得不够详细,我设计界面的时候考虑在app窗口能有多个选择按键,每个按键能调出对应的类实例完成相应的操作,如果按照您回复中所述实现,所有的操作和输入将在同一个窗口,和我的初衷不相符,想问下我的想法能否在tkinter实现?PS:我用的是python3.4版本
小富即安, 积分 4776, 距离下一级还需 224 积分
论坛徽章:4
johnsonchen313
如果这是你的需求的话,你可以把下面这行改一下:
App 类中的
root = Tk()
root = Toplevel()
然后,在UserInsertClass(root)时,就会使用新的windows来处理,并且可以得到返回值了。
白手起家, 积分 9, 距离下一级还需 191 积分
论坛徽章:0
感谢回复,经过验证,按照您的说法进行修改就可以传递输入参数了。
问题原因是因为Tkinter无法同时有两个Tk都是Root么?
关于Tkinter有没有什么比较全面的文档推荐呢?多谢!
小富即安, 积分 4776, 距离下一级还需 224 积分
论坛徽章:4
一个TK的Root相当于一个Windows进程,两个进程之间,如果没有设定通讯方式,通常是不能进行数据共享的。
另:我对于UI不熟悉,提供问题的解决方案的步骤是通过:google加读找到的文档就可以了。
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处

我要回帖

更多关于 rest接口调用实例 的文章

 

随机推荐